PerlおよびGUI。 メニューを操作する

Tkウィジェットの概要、さまざまなOSの機能を考慮してメインメニューを確認することから始めます。



まず、アプリケーションのブランクを作成します。



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

 $ PROGNAME = 'app';
 $ VERSION = '0.1';
 <habracut>

私の$ windowingsystem = Tkx :: tk_windowingsystem();
私の$ IS_AQUA =($ windowingsystem eq 'aqua');

 #一部のボタンの名前は異なる場合があるため、 
 #OSXではControl、Win / X11ではCtrl、さらに変数を追加
 #(ホットキーに便利)
私のplat_acc_ctrl =($ ^ O eq 'darwin')?  ( 'Control-'):( 'Ctrl +');
私のplat_evt_ctrl =($ ^ O eq 'darwin')?  ( 'Control-'):( 'Control-');

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

 Tkx :: tk(appname => $ PROGNAME);
 Tkx :: wm_minsize($ mw => qw(320,200));

 #-menuオプションを使用して新しいメニューが添付されます
 $ mw-> configure(
   -menu => make_menu($ mw)、
 );


 Tkx :: MainLoop;
 1;

 sub on_quit {
   Tkx :: tk ___ messageBox(-message => 'Goodbye;]');
  出る
 }

 sub show_about {
   Tkx :: tk ___ messageBox(-message => "$ PROGNAME $ VERSION");
 }

 sub make_menu {
 私の$ mw =シフト|| 帰る

  #デフォルトでは、すべてのメニューはGIMPで似ていますが、ピンを外すことができます
  #したがって、このオプションをオフにします
  Tkx :: option_add( '* Menu.tearOff'、0)

  #...以下に続く

  リターン$ m; 
 }




ファイル、編集、ヘルプなど、すべてが通常どおりです。 (カスケードメニュー)。 新しいオブジェクトは、new_menu()メソッドを使用して作成されます。 (コンテナのような)



私の$ m = $ mw-> new_menu();  #トップレベル
私の$ fm = $ m-> new_menu();  #ファイル
私の$ em = $ m-> new_menu();  #編集

 #次に、アイテムをトップレベルに追加します
 $ m-> add_cascade(-label => 'File'、-menu => $ fm、-underline => 0);
 $ m-> add_cascade(-label => 'Edit'、-menu => $ em、-underline => 0);





追加はadd_cascade()を介して行われます。ここで、

-labelはメニューのタイトルです。

-menu-ウィジェット

-underline-アンダースコア文字インデックス。 Alt +文字ボタンを使用してすばやくナビゲーションする必要があります(番号は0から始まります)



何が起こったのか見てください。

画像



空のメニューには意味がないため、コマンドを「詰め込み」ます



 #ファイルメニュー
 $ fm-> add_command(
   -label => '何かをする'、
   -下線=> 0、
   -command => sub {}、
 );

 #セパレーター
 $ fm-> add_separator();

 $ fm-> add_command(
   -label => 'Quit'、
   -下線=> 0、
   -accelerator => "$ {plat_acc_ctrl} Q"、
   -command => [\&on_quit]、
 );

 Tkx :: bind(all => "<$ {plat_evt_ctrl} q>" => [\&on_quit]);

 #編集メニュー
 $ em-> add_command(
   -label => 'Cut'、
   -下線=> 2
   -accelerator => "$ {plat_acc_ctrl} X"、
   -command => sub {Tkx :: event_generate(Tkx :: focus()、 '<< anchor> habracut </ anchor >>')}、
 );
    
 $ em-> add_command(
   -label => 'Copy'、
   -下線=> 0、
   -accelerator => "$ {plat_acc_ctrl} C"、
   -command => sub {Tkx :: event_generate(Tkx :: focus()、 '<< Copy >>')}、
 );
    
 $ em-> add_command(
 -label => 'Paste'、
 -下線=> 0、
 -accelerator => "$ {plat_acc_ctrl} V"、
 -command => sub {Tkx :: event_generate(Tkx :: focus()、 '<< Paste >>')}、
 );




終了時に、バインドメソッドを使用してホットキー(Ctrl + Q)を作成しました。

「アクセラレータ」を示すには、 -acceleratorが使用され、クリックされたときのイベント自体は-commandです

コマンドはサブルーチンへのポインターを受け入れ、パラメーターを渡す必要がある場合は、匿名配列を使用します

[\&function、parameter1、parameter2]



ファイル、編集は。 残りのアイテム-ヘルプ。



X11には、ヘルプ項目用の独自のシステム名( 'help' )があります。 OSXには「アップル」メニューもあります

これを考えると:

私の$ hname =($ IS_AQUA? 'nothelp': 'help');
私の$ hm = $ m-> new_menu(-name => $ hname);

 $ m-> add_cascade(
   -label => 'Help'、
   -menu => $ hm、
   -下線=> 0、
 );

 #..ヘルプ、ホームページなどを追加

 if(!$ IS_AQUA){
   $ hm-> add_command(
     -label => 'About'、
     -下線=> 0、
     -command => [\&show_about]、
   );
 } else {
    my $ apple_menu = $ m-> new_menu(-name => 'apple');
    $ m-> add_cascade(
      -label => $ PROGNAME、
      -menu => $ apple_menu、
    );

    $ m-> add_command(
      -label => "$ PROGNAMEについて"、
      -command => [\&show_about]、
    );
 }





画像



後でLinux / OSXでスクリーンショットを追加します。






All Articles