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でスクリーンショットを追加します。