PerlおよびGUI。 パート1

以前の投稿で、 PerlでGUIを作成するためのライブラリを調べました。 したがって、仕事に取りかかることができます。



今日は、単純なアプリケーション(ウィンドウとメインメニュー)の作成を試みます。

TkxとActivePerlを使用します。



最初に、基本原則を理解する必要があります。





Tkxは、Tcl言語とTkライブラリの間のレイヤーです。 つまり、Tkxを使用して記述したものはすべて、実際にはTcl環境で呼び出されます。



Tclはツールのコマンド言語です。 複雑なことは何もありません、構文は単純です:

1 2 ..N





この言語は、パッケージ(またはPerlのようなモジュール)もサポートしています。呼び出しは次のようになります。

:: 1 2 ..N







Tkの基礎はウィジェットです。 作成された各ウィジェットには独自の名前があります。





。 -メインウィンドウ。

.fはメインフレームです。

.fb-メインフレームのボタン。



Tkxはオブジェクト指向のアプローチを提供するため、名前について心配する必要はありません。 Tkxはそれをすべて自分で行います。 呼び出しに関する規則も適用されます(これが最も重要です)。 以下に例を示します。



TCL: package require BWidget





Perl: Tkx::package_require('BWidget');







TCL: ttk::button .b -text "Hello World" -command exit





Perl: my $b = $main_window->new_ttk__button( -text => 'Hello World', -command => sub { exit; } );







TCL: tk_messageBox -message "Press OK"





Perl: Tkx::tk___messageBox( -message => 'Press OK' );







作成済みのオブジェクトに対して何らかのアクションを実行する場合は、短い形式を使用できます(g_プレフィックスを使用)。 たとえば、ウィンドウのタイトルを設定する必要があります



Tcl:

wm title . "Main Window"







完全な形式:

Tkx::wm_title( '.', 'Main Window' );







簡単な説明:

$main_window->g_wm_title( 'Main Window' );







つまり、真珠の「::」は「__」(2つのアンダースコア)、複合コマンドのスペースは1つのアンダースコア「_」、TclのアンダースコアはPerl「___」の3つのアンダースコアで示されます。



各プログラムには、メインイベントループ(MainLoop)の呼び出しが必要です。または、

Tkx::MainLoop();







Tcl / Tkコマンドリファレンスはここにあります



そして今、実例です。

画像



ソースコード:

  #!/ usr / bin / perl
厳格な使用;
 Tkxを使用します。

 $ PROGNAME = 'MyProgram';
 $ VERSION = '0.1';

 #メインウィンドウを作成
 my $ main_window = Tkx :: widget-> new( '。');

 #タイトルを設定
 $ main_window-> g_wm_title( 'メインウィンドウ');

 #メニューを作成して添付
 $ main_window-> configure(-menu => make_menu($ main_window));


 #メインメニュー作成ルーチン
 sub make_menu {
     my $ mw = shift;
    
     #メニューのピン解除モードを無効にします(GIMPなど)
     Tkx :: option_add( '* tearOff'、0);
    
     #OSによっては、Ctrl / Controlボタンの識別子が変わる場合があります
    私の$ control =($ ^ O eq "darwin")?  「コマンド」:「コントロール」。
    私の$ ctrl =($ ^ O eq "darwin")?  「Command-」:「Ctrl +」;
    
     #トップレベル
    私の$ menu = $ mw-> new_menu();
    私の$ menu_file = $ menu-> new_menu();
    私の$ menu_help = $ menu-> new_menu();
    
     $ menu-> add_cascade(
         -label => 'File'、
         -menu => $ menu_file、
     );
    
     $ menu-> add_cascade(
         -label => 'Help'、
         -menu => $ menu_help、
     );
    
     #ファイルメニューにアイテムを追加
     $ menu_file-> add_command(
         -label => 'Quit'、
         -command => sub {$ mw-> g_destroy();  }、
     );
    
     #ヘルプメニュー
     $ menu_help-> add_command(
         -label => 'About ...'、
         -command => sub {
             Tkx :: tk ___ messageBox(
                 -title => '...について'、
                 -message => "$ PROGNAME $ VERSION"、
             );
         }、
     );
    
     #メニューに戻る
     $メニューを返します。    
 }

 #メインループを実行
 Tkx :: MainLoop(); 




次の部分では、メインウィジェットと、OSXでの作業におけるいくつかの機能について検討します。






All Articles