• 検索結果がありません。

メニュー(

N/A
N/A
Protected

Academic year: 2021

シェア "メニュー("

Copied!
9
0
0

読み込み中.... (全文を見る)

全文

(1)

メニュー(http://homepage3.nifty.com/kaku-chan/tcl_tk/chapter_225.html より引用)

メニューは通常、トップレベルのウィンドウの上部に付いています。メニューには色々な要素が多いの

で、例を豊富に揃えてみました。

まずは最も簡単な例から。

実行すると次のようになります。

3行目が最上位のメニュー項目になります。このメニューには下位階層として「開く」

「保存」

「終了」

という項目を付けたいので、形式を cascade スタイルにします。これが5行目の「.m1 add cascade ...」

の意味です。さらに表記文字は -label オプションで指定し、下位階層のメニュー項目を -menu オプシ

ョンで指定します。一方、下位階層は4行目で .m1.files というウィジットを定義していますが、ここ

に追加する要素を 6 ~ 9 行目で指定しています。

「開く」

「保存」

「終了」の3つの要素は選択されると

コマンドを実行するので、形式を command スタイルにします。これが「.m1.files add command ...」

の意味です。選択されたときに実行するコマンドは -command オプションで指定します。メニューの区

切りを表示するには、8行目のように separator スタイルを指定します。

10 行目はトップレベルウィンドウに -menu オプションを用いてメニューバーを設定する記述です。オ

プション -menu については、 トップレベルのウィンドウを作る で解説してあります(toplevel コマ

ンドのオプション)

これをウィンドウ "." に対して configure ウィジットコマンドで後から設定して

いることになります。

今度は最上位のメニューに「オプション」項目を追加してみます。

1 : set FONT {{MS Pゴシック} 10 normal}

2 :

3 : menu .m1; # ここは「ファイル」を表示するメニュー要素 4 : menu .m1.files; # ここは「ファイル」以下のメニュー要素 5 : .m1 add cascade -label ファイル -font $FONT -menu .m1.files

6 : .m1.files add command -label 開く -font $FONT -command tk_getOpenFile 7 : .m1.files add command -label 保存 -font $FONT -command tk_getSaveFile 8 : .m1.files add separator

9 : .m1.files add command -label 終了 -font $FONT -command exit 10 : . configure -menu .m1; # ここでメニューバーに設定

1 : set FONT {{MS Pゴシック} 10 normal} 2 :

3 : menu .m1; # ここは「ファイル」「オプション」を表示するメニュー要素 4 : menu .m1.files; # ここは「ファイル」以下のメニュー要素

(2)

実行すると次のようになります。

実行すると次のようになります

最初の例に比べて、5、15、16 行目が追加になっています。このようにしてメニュー要素を追加してい

けばよいことがわかります。

ところで、上記2つの例では、メニューを表示したときに「ファイル」や「オプション」と下位階層と

の間に破線が表示されています。この破線をマウスでクリックすると、メニュー項目を別ウィンドウに

「引き剥す」ことができます(下図において、左から右の形式に変化します)

この機能は、メニューに -tearoff false を指定すると無効にすることができます。その際は破線も表

示されなくなります。例えば2番目の例の4行目で「menu .m1.files -tearoff false」とすると、

「フ

ァイル」メニューは引き剥せなくなります。

6 :

7 : # 「ファイル」と「ファイル以下の階層」を以下で設定

8 : .m1 add cascade -label ファイル -font $FONT -menu .m1.files

9 : .m1.files add command -label 開く -font $FONT -command tk_getOpenFile 10 : .m1.files add command -label 保存 -font $FONT -command tk_getSaveFile 11 : .m1.files add separator

12 : .m1.files add command -label 終了 -font $FONT -command exit 13 :

14 : # 「オプション」と「オプション以下の階層」を以下で設定

15 : .m1 add cascade -label オプション -font $FONT -menu .m1.options

16 : .m1.options add command -label 配色 -font $FONT -command tk_chooseColor 17 :

18 : . configure -menu .m1; # ここでメニューバーに設定

(3)

3番目の例はショートカットキーの設定です。

実行して Alt + F キーを押す(または Alt キーを押してから F を押す、あるいは Alt キーを押して

から ↓ キーを押す)と次のようになります。

最上位の部分(というより、タイプとして cascade を指定したもの)は -underline オプションを使い

ます。このオプションは数字を引数にとり、指定した位置にある文字をショートカットキーに設定しま

す。したがって、メニュー項目の表示文字列を「ファイル(F)」のように工夫する必要があります。位置

は 0(ゼロ)から始まるので、この場合は5番目の位置の文字 F にショートカットキーが設定されます

(日本語も1文字と数えます、8行目参照)

メニューの下位階層(タイプが command のもの)は -accelerator オプションで指定します。ただし、

ここで指定できるのは表示文字列だけなので、 20 ~ 22 行目のように、実際にはイベントを関連付け

ておかなければなりません。イベントの扱いについては、例から何となく意味がわかると思いますが、

詳細は イベント処理 を参照してください。 20 行目のイベント設定は「ウィンドウ "." においてコン

トロールキーと"o" を同時に押すと、 tk_getOpenFile を実行する」ことを示しています。ここまで実

施すると、きちんとしたメニューらしくなります。

4番目の例は中間階層に cascade タイプのメニューを配置し、ラジオボタンタイプ、チェックボタンタ

イプのメニューを追加した例です。

「オプション」メニューを「表示」メニューに変えて、いろいろ配置

1 : set FONT {{MS Pゴシック} 10 normal} 2 :

3 : menu .m1

4 : menu .m1.files -tearoff false; # 引き剥せなくしてみました 5 : menu .m1.options -tearoff false; # 引き剥せなくしてみました 6 :

7 : # 「ファイル」と「ファイル以下の階層」を以下で設定

8 : .m1 add cascade -label ファイル(F) -font $FONT -menu .m1.files -underline 5

9 : .m1.files add command -label 開く -font $FONT -command tk_getOpenFile -accelerator "Ctrl-O" 10 : .m1.files add command -label 保存 -font $FONT -command tk_getSaveFile -accelerator "Ctrl-S" 11 : .m1.files add separator

12 : .m1.files add command -label 終了 -font $FONT -command exit 13 :

14 : # 「オプション」と「オプション以下の階層」を以下で設定

15 : .m1 add cascade -label オプション(O) -font $FONT -menu .m1.options -underline 6

16 : .m1.options add command -label 配色 -font $FONT -command tk_chooseColor -accelerator "Ctrl-C" 17 :

18 : # -accelerator オプションは表示だけなので、実際にキーイベントを設定

19 : # 「コントロールキー + O」は「Control-o」のように表現する規則(o は小文字にする) 20 : bind . <Control-o> tk_getOpenFile

21 : bind . <Control-s> tk_getSaveFile 22 : bind . <Control-c> tk_chooseColor 23 :

(4)

してみました。

1 : set FONT {{MS Pゴシック} 10 normal} 2 :

3 : menu .m1

4 : menu .m1.files -tearoff false; 5 : menu .m1.display -tearoff false;

6 : menu .m1.display.toolbar -tearoff false; 7 : menu .m1.display.zoom -tearoff false; 8 : menu .m1.display.style -tearoff false; 9 :

10 : # 「ファイル」と「ファイル以下の階層」を以下で設定

11 : .m1 add cascade -label ファイル(F) -font $FONT -menu .m1.files -underline 5

12 : .m1.files add command -label 開く -font $FONT -command tk_getOpenFile -accelerator "Ctrl-O" 13 : .m1.files add command -label 保存 -font $FONT -command tk_getSaveFile -accelerator "Ctrl-S" 14 : .m1.files add separator

15 : .m1.files add command -label 終了 -font $FONT -command exit 16 :

17 : # 「表示」と「表示以下の階層」を以下で設定

18 : .m1 add cascade -label 表示(V) -font $FONT -menu .m1.display -underline 3 19 : .m1.display add cascade -label "ツールバー(T)" -font $FONT \

20 : -menu .m1.display.toolbar -underline 6 21 : .m1.display add separator

22 : .m1.display add cascade -label "ズーム(Z)" -font $FONT \ 23 : -menu .m1.display.zoom -underline 4 24 : .m1.display add cascade -label "スタイル(S)" -font $FONT \ 25 : -menu .m1.display.style -underline 5 26 :

27 : # 「ツールバー」の下の階層のメニューを作成

28 : .m1.display.toolbar add checkbutton -label パネル -font $FONT \ 29 : -onvalue 1 -offvalue 0 -variable optionPanel

30 : .m1.display.toolbar add checkbutton -label ナビゲーションバー -font $FONT \ 31 : -onvalue 1 -offvalue 0 -variable optionNavi

32 : .m1.display.toolbar add checkbutton -label ステータスバー -font $FONT \ 33 : -onvalue 1 -offvalue 0 -variable optionStatus 34 :

35 : # 「ズーム」の下の階層のメニューを作成

36 : .m1.display.zoom add radiobutton -label 400% -font $FONT \ 37 : -value 400 -variable zoomVal

38 : .m1.display.zoom add radiobutton -label 200% -font $FONT \ 39 : -value 200 -variable zoomVal

40 : .m1.display.zoom add radiobutton -label 100% -font $FONT \ 41 : -value 100 -variable zoomVal

42 : .m1.display.zoom add radiobutton -label 50% -font $FONT \ 43 : -value 50 -variable zoomVal

44 : .m1.display.zoom add radiobutton -label 25% -font $FONT \ 45 : -value 25 -variable zoomVal

46 :

47 : # 「スタイル」の下の階層のメニューを作成

48 : .m1.display.style add radiobutton -label 標準 -font $FONT \ 49 : -value normal -variable styleVal

50 : .m1.display.style add radiobutton -label クラシック -font $FONT \ 51 : -value classic -variable styleVal

52 : 53 : # 変数の初期値を設定しておく 54 : set optionPanel 1 55 : set optionNavi 0 56 : set optionStatus 1 57 : set zoomVal 100 58 : set styleVal normal 59 :

60 : # -accelerator オプションは表示だけなので、実際にキーイベントを設定

61 : # 「コントロールキー + O」は「Control-o」のように表現する規則(o は小文字にする) 62 : bind . <Control-o> tk_getOpenFile

63 : bind . <Control-s> tk_getSaveFile 64 :

(5)

実行して適当に操作すると、例えば次のようになります。

チ ェッ クボ タン やラ ジオ ボタ ンの 部分 を操 作し て、 wish の コン ソー ルウ ィン ドウ 上で 「 puts

$optionPanel」などとすれば、変数の値が適切に設定されることがわかると思います。

5番目の例はアイコンの設定です。綺麗なアイコンを作るために ダウンロードサイト で紹介している

ICONS を利用しています。

※ ところで、この4番目の例だと「表示」以下のメニューに対して "T" "Z" "S" のショートカット キーが効きません。メニューの文字列をすべてアルファベット(半角)にしたら動作したので、処理 系に少々不具合があるのかも知れません。

1 : set FONT {{MS Pゴシック} 10 normal} 2 :

3 : # 以下は「開く」イメージ

4 : image create photo fileopen16 -data {

5 : R0lGODlhEAAQAIUAAPwCBAQCBOSmZPzSnPzChPzGhPyuZEwyHExOTFROTFxa 6 : VFRSTMSGTPT29Ozu7Nze3NTS1MzKzMTGxLy6vLS2tLSytDQyNOTm5OTi5Ly+ 7 : vKyqrKSmpIyOjLR+RNTW1MzOzJyenGxqZBweHKSinJSWlExKTMTCxKyurGxu 8 : bBQSFAwKDJyanERCRERGRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 9 : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaR 10 : QIBwGCgGhkhkEWA8HpNPojFJFU6ryitTiw0IBgRBkxsYFAiGtDodDZwPCERC 11 : EV8sEk0CI9FoOB4BEBESExQVFgEEBw8PFxcYEBIZGhscCEwdCxAPGA8eHxkU 12 : GyAhIkwHEREQqxEZExUjJCVWCBAZJhEmGRUnoygpQioZGxsnxsQrHByzQiJx 13 : z3EsLSwWpkJ+QQAh/mhDcmVhdGVkIGJ5IEJNUFRvR0lGIFBybyB2ZXJzaW9u 14 : IDIuNQ0KqSBEZXZlbENvciAxOTk3LDE5OTguIEFsbCByaWdodHMgcmVzZXJ2 15 : ZWQuDQpodHRwOi8vd3d3LmRldmVsY29yLmNvbQA7 16 : } 17 : 18 : # 以下は「保存」イメージ

19 : image create photo filesave16 -data {

20 : R0lGODlhEAAQAIUAAPwCBAQCBFRSVMTCxKyurPz+/JSWlFRWVJyenKSipJSS 21 : lOzu7ISChISGhIyOjHR2dJyanIyKjHx6fMzOzGRiZAQGBFxeXGRmZHRydGxq 22 : bAwODOTm5ExOTERGRExKTHx+fGxubNza3Dw+PDQ2NAAAAAAAAAAAAAAAAAAA 23 : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 24 : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAaA 25 : QIAQECgOj0jBgFAoBpBHpaFAbRqRh0F1a30ClAhuNZHwZhViqgFhJizSjIZX 26 : QCAoHOKHYw5xRBiAElQTFAoVQgINFBYXGBkZFxYHGRqIDBQbmRwdHgKeH2Yg 27 : HpmkIR0HAhFeTqSZIhwCFIdIrBsjAgcPXlBERZ4Gu7xCRZVDfkEAIf5oQ3Jl 28 : YXRlZCBieSBCTVBUb0dJRiBQcm8gdmVyc2lvbiAyLjUNCqkgRGV2ZWxDb3Ig 29 : MTk5NywxOTk4LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KaHR0cDovL3d3dy5k 30 : ZXZlbGNvci5jb20AOw== 31 : } 32 : 33 : menu .m1

34 : menu .m1.files -tearoff false; # 引き剥せなくしてみました 35 : menu .m1.options -tearoff false; # 引き剥せなくしてみました 36 :

(6)

「ファイル」メニューを引き出してみると、次のようになります。

image コマンドもまだ解説していませんが、

「できる」ということを知っておけばとりあえずよいでしょ

う(実際には ICONS のツールを使うと image コマンド部分を作り出してくれるので、それをそのまま

利用します)

menu コマンド

上記の例に示しただけでも通常の使用には十分と思いますが、

ここで menu コマンドの形式を示します。

コマンド書式 menu pathName ?options?

説明

第1引数にはメニューウィジットとして使われるパス名を指定する。options の部分

にはいくつかのウィジット標準オプションと、menu コマンド特有のオプションを指

定できる。どのようなオプションがあるかについては以下で解説する。

つまり、menu に続けてドット区切りのウィジット名、オプション、というように記述します。

37 : # 「ファイル」と「ファイル以下の階層」を以下で設定 38 : # ここではアイコンイメージを設定

39 : .m1 add cascade -label ファイル(F) -font $FONT -menu .m1.files -underline 5 40 : .m1.files add command -label 開く -font $FONT -command tk_getOpenFile \ 41 : -accelerator "Ctrl-O" -image fileopen16 \

42 : -compound left

43 : .m1.files add command -label 保存 -font $FONT -command tk_getSaveFile \ 44 : -accelerator "Ctrl-S" -image filesave16 \

45 : -compound left 46 : .m1.files add separator

47 : .m1.files add command -label 終了 -font $FONT -command exit 48 :

49 : # 「オプション」と「オプション以下の階層」を以下で設定

50 : .m1 add cascade -label オプション(O) -font $FONT -menu .m1.options -underline 6 51 : .m1.options add command -label 配色 -font $FONT -command tk_chooseColor \ 52 : -accelerator "Ctrl-C"

53 :

54 : # -accelerator オプションは表示だけなので、実際にキーイベントを設定

55 : # 「コントロールキー + O」は「Control-o」のように表現する規則(o は小文字にする) 56 : bind . <Control-o> tk_getOpenFile

57 : bind . <Control-s> tk_getSaveFile 58 : bind . <Control-c> tk_chooseColor 59 :

60 : . configure -menu .m1; # ここでメニューバーに設定

※ この例を実行してみると、「ファイル」メニューを引き出した直後、アイコンの表 示がちょっと変です。マウスカーソルを合わせて一旦反転表示させるときちんと出る のですが...。理由は不明です。

(7)

menu コマンド特有のオプション

menu コマンド特有のオプションには以下のものがあります。

-postcommand command

メニューが表示されたときに実行されるコマンドを指定します。

-selectcolor color

メニュー要素がチェックボタンまたはラジオボタンスタイルのとき、チェックマークの色を設定で

きます。

-tearoff value

ブーリアンタイプの値(0/1、true/false、on/off など)を指定します。真のときはメニュー要素

が「引き剥せる」スタイルであることを示します。

-tearoffcommand command

メニューが「引き剥された」ときに実行するコマンドを指定します。なお、ここで指定したコマン

ドが呼び出されるとき、引数が2つ付け加えられます。第1引数はメニューウィジットのパス、第

2引数は引き剥されたメニューウィジットのパスです。したがって、引数を2つ持つプロシージャ

などを作って、ここに指定するのが普通です。

-title string

引き剥されたメニューのタイトル文字列を指定します。

標準オプション

menu コマンドに対して使える標準オプションには以下のものがあります。

「ウィジット標準オプション」

にて解説してありますので、そちらを参照してください。

* -activebackground

* -activeborderwidth

* -activeforeground

* -background または -bg

* -borderwidth または -bd

* -cursor

* -disabledforeground

* -font

* -foreground または -fg

* -relief

* -takefocus

ウィジットのコマンド

メニューウィジットを「menu pathName ?options?」として生成した後は、 pathName をコマンドとして

使えます。この場合のコマンドは次の形式になります。

コマンド書式

pathName option ?arg arg ...?

説明

メニューウィジットのウィジットコマンド。オプションについては以下で解説する。

オプションを解説する前に、メニュー要素の位置を index として指定するものがありますので、 index

の表現について触れておきます。 index として使えるのは、

* 数値

* active

* end

* last

* none

* @ 数値

* パターン

です。

数値 はメニュー上の位置を示します。

最初の要素は 0 です。

active は現在アクティブな要素、

(8)

end と last は共に最後の要素を示します。 @ 数値 は Y 座標で指定するものです。 パターン は文字

列のマッチングで、上から下にサーチしていって最初にマッチしたものを選択します。

pathName add type ?option value option value ...?

メニューの末尾に新しい要素を追加します。 type に指定できるのは cascade、 checkbutton、

command、 radiobutton、 separator です。本コマンドのオプションは種類が多いので、後述しま

す。

pathName cget option

option で示すオプションの値を返します。例えば「.m1 cget -bg」とすると、

「SystemMenu」とい

う値が返されたりします。

pathName configure ?option? ?value option value ...?

option と value を指定した場合は、指定したオプションの値を value に設定します。 option を

指定して value を省略した場合は、当該オプションの値を返します。オプションもすべて省略した

場合は、すべての有効なオプションと、それに対して設定されている値のリストを返します。

pathName delete index1 ?index2?

index1 から index2 までの要素を削除します。 index2 を省略したときは、index1 のみを削除し

ます。

pathName entrycget index option

index で示される位置の要素のオプションの値を返します。

pathName entryconfigure index ?options?

pathName configure コマンドのメニュー要素版です。

pathName index index

index を数値形式に変換して返します。

pathName insert index type ?option value option value ...?

pathName add コマンドの途中挿入版です。挿入位置を index で指定します。

pathName invoke index

index で示される位置の要素を評価します。例えばコマンドが割り付けられていれば、実行されま

す。

pathName post x y

X, Y 座標で示す位置にメニューを表示します。

pathName type index

index が示す位置の形式を返します。返される値は command、 separator、 tearoff のいずれかで

す。

pathName unpost

メニューを非表示にします。

pathName yposition index

index が示す位置の Y 座標を返します。

「pathName add type」コマンドのオプション

pathName add type ?option value option value ...? コマンドのオプション部分について解説します。

-activebackground value

アクティブなときの背景色を指定します。

-activeforeground value

アクティブなときの前景色を指定します。

-accelerator value

メニュー要素に表示するショートカットキー文字列を指定します。あくまで表示だけであり、この

ショートカットキーを有効にするためには、別途 bind コマンドで設定を行なう必要があります。

-background value

背景色を設定します。

-bitmap value

ビットマップイメージを設定します。

-columnbreak value

(9)

ブーリアン値を指定します。偽のときは、メニュー項目を下に付け加えていきます。これが通常の

動きです。真のときは、先頭の要素の「右側」に追加されていく形になります。

-command value

実行するコマンドを指定します。

-compound value

文字列とともに表示するイメージを文字列のどちら側に表示するかを指定します。デフォルトは

none で、テキストとイメージを同時には表示しません。

指定できる値は none、 bottom、

top、 left、

right、 center です。

-font value

使用するフォントを指定します。

-foreground value

前景色を指定します。

-image value

image create コマンドで作られたイメージを指定します。

-indicatoron value

チェックボタンあるいはラジオボタンのスタイルのとき、インジケータ(チェックマークのこと)

を表示するかしないかをブーリアンタイプで指定します。

-label value

メニュー要素の表記文字列を指定します。

-menu value

cascade スタイルのメニュー要素のとき、子のメニューを指定します。子のメニューはウィジット

階層上も子でなければなりません。

-offvalue value

チェックボタン要素が非選択のときの値を指定します。

-onvalue value

チェックボタン要素が選択されているときの値を指定します。

-selectcolor value

チェックボタンあるいはラジオボタンのスタイルのとき、選択されたときのインジケータの色を指

定します。

-state value

メニュー要素の状態を指定します。指定できる値は normal、 active、 disabled です。 disabled を

指定すると、そのメニュー要素は選択できなくなります。

-underline value

メニュー要素に表記されている文字列のうち、何番目の文字をショートカットキーにするかを指定

します。最初の文字は 0 番目です。

-value value

ラジオボタンスタイルのとき、選択された場合の値を指定します。

-variable value

チェックボタンあるいはラジオボタンのスタイルのとき、値を保持する変数名を指定します。

参照

関連したドキュメント

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

Nintendo Switchでは引き続きハードウェア・ソフトウェアの魅力をお伝えし、これまでの販売の勢いを高い水準

Q-Flash Plus では、システムの電源が切れているとき(S5シャットダウン状態)に BIOS を更新する ことができます。最新の BIOS を USB

手動のレバーを押して津波がどのようにして起きるかを観察 することができます。シミュレーターの前には、 「地図で見る日本

海外市場におきましては、米国では金型業界、セラミックス業界向けの需要が引き続き増加しております。受注は好

この P 1 P 2 を抵抗板の動きにより測定し、その動きをマグネットを通して指針の動きにし、流

DJ-P221 のグループトークは通常のトーンスケルチの他に DCS(デジタルコードスケル

・カメラには、日付 / 時刻などの設定を保持するためのリチ ウム充電池が内蔵されています。カメラにバッテリーを入