まず、アプリケーションのブランクを作成します。
#!/ 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でスクリーンショットを追加します。