15. ウィジェットMenu
「ドロップダウン メニュー」は、ユーザーに複数の選択肢を提供する一般的な方法ですが、ユーザーが選択していない場合、アプリケーション画面上の占有スペースは最小限に抑えられます。
-
メニューボタンはアプリケーション上に常に表示されます。
-
メニューは、ユーザーがメニュー ボタンをクリックしたときのみ表示されるオプションのリストです。
-
オプションを選択するには、ユーザーはマウスをメニュー ボタンからオプションの 1 つまで下に移動します。あるいは、メニュー ボタンをクリックして放すこともできます。オプションが表示され、ユーザーがいずれかをクリックするまで表示されたままになります。
-
Tkinter の Unix バージョンは(少なくとも) これをサポートしています。「メニューを切り離します。」 デザイナーが希望すると、オプションの上に点線が表示されます。ユーザーはこの行をクリックしてメニューを「切り離す」ことができます。新しい自己完結型のウィンドウが表示され、その中にオプションが含まれています。
メニュー ボタンを作成してメニュー ウィジェットに接続する方法については、下記のセクション 16「メニュー ボタン ウィジェット」 を参照してください。まず、オプションのリストを表示するウィジェットを見てみましょう。Menu
メニューに表示されるオプションは次のいずれかです。
-
単純なコマンド: ユーザーが何らかのアクションを実行するために選択できるテキスト文字列 (または画像)。
-
カスケード: ユーザーが別の全体を表示するために選択できるテキスト文字列または画像メニューの選択。
-
チェックボタン (セクション 9「チェックボタンウィジェット」を参照)。
-
ラジオ ボタンの配列 (セクション 20「ラジオ ボタン ウィジェット」を参照)。
メニュー ウィジェットを作成するには、まずメニュー ウィジェットを作成する必要があります。これを次のように呼びます。Menubutton
mb
w = tk.Menu(mb,option, ...)
このコンストラクターは新しいウィジェットを返します。オプションには次のものが含まれます。Menu
表 23.菜单
ウィジェットのオプション
activebackground |
オプションがマウスの下にあるときに表示される背景色。セクション5.3「色」を参照してください。 |
activeborderwidth |
周囲の選択範囲がマウスの下にあるときを指定します。デフォルトは 1 ピクセルです。可能な値については、セクション5.1「寸法」を参照してください。 |
activeforeground |
オプションがマウス上にある場合。 |
bg またはbackground |
マウスの下にないオプションの背景色。 |
bd またはborderwidth |
すべての選択範囲の周囲の境界線の幅 (セクション5.1「サイズ」を参照)。デフォルトは <> ピクセルです。 |
cursor |
マウスオーバーで選択できますが、メニューが切り取られた場合に限ります。セクション5.8「カーソル」を参照してください。 |
disabledforeground |
アイテムのテキストの色。state tk.DISABLED |
font |
テキスト選択のデフォルトのフォント。セクション5.4「タイプフォント」を参照してください。 |
fg またはforeground |
マウスの下にないオプションに使用する前景色。 |
postcommand |
このオプションを処理に設定すると、誰かが持ち込むたびにプログラム上でこのメニューが呼び出されます。 |
relief |
メニューのデフォルトの 3D 効果は です。他のオプションについては、セクション3.5「エンボススタイル」を参照してください。relief=tk.RAISED |
selectcolor |
チェックボックスやラジオボタンをチェックしたときに表示される色を指定します 。 |
tearoff |
通常、メニューは切り離すことができます。オプション リストの最初の位置 (位置 0) は切り離し要素によって占められ、他のオプションは位置 1 から追加されます。設定されている場合、メニューには切り離し機能がありません。選択範囲は追加を開始する位置 0 からとなります。tearoff=0 |
tearoffcommand |
ユーザーがメニュー内のティアオフ エントリをクリックしたときにプログラムに通知を受け取るようにするには、このオプションをプロシージャに設定します。これは、親ウィンドウのウィンドウ ID と、ティアオフ メニューのルート ウィンドウである新しいウィンドウのウィンドウ ID の 2 つのパラメーターを使用して呼び出されます。 |
title |
通常、ティアオフ メニュー ウィンドウのタイトルは、このメニューにつながるメニュー ボタン、またはカスケードのテキストと同じになります。このウィンドウのタイトルを変更したい場合は、オプションをこの文字列に設定します。title |
これらのメソッドはオブジェクトで使用できます。メニューにオプションを作成する人は、独自の選択固有のオプションを持っています (セクション15.1「メニュー項目作成 (オプション) オプション」を参照してください)。Menu
.add(
kind
, coption, ...)
指定された新しい要素を、このメニューで次に使用可能なオプションとして追加します。パラメータは、 、 、または のいずれかです。引数に応じて、このメソッドは 、 などと同等です。詳細については、以下のこれらのメソッドを参照してください。kind
kind
'cascade'
'checkbutton'
'command'
'radiobutton'
'separator'
kind
.add_cascade()
.add_checkbutton()
.add_cascade(coption, ...)
このメニューで次に使用可能な要素オプションとして新しいカスケード要素を追加します。この呼び出しのオプションを使用して 、メニューの次のレベルであるタイプ オブジェクトにカスケードします。menu
Menu
.add_checkbutton(coption, ...)
次に利用可能なオプションとして新しいチェックボックスを自分自身に追加します。これらのオプションを使用すると、チェックボックスオブジェクトを設定するのとほぼ同じ方法でチェックボックスを設定できます(セクション15.1「メニュー項目作成 (オプション) オプション」を参照してください)。
.add_command(coption, ...)
次に利用可能なオプション self として新しいコマンドを追加します。メニューにテキストまたは画像を配置するには、 、 オプションを使用します。このオプションが Take の場合、このオプションを使用してこのオプションを接続します。label
bitmap
image
command
.add_radiobutton(coption, ...)
次に利用可能なオプションとして新しいラジオ ボタンを追加します。これらのオプションを使用すると、オブジェクトとほぼ同じ方法でラジオ ボタンを設定できます (セクション20「ラジオ ボタン ウィジェット」を参照)。Radiobutton
.add_separator()
現在定義されている最後のセパレータの後にセパレータの選択を追加します。これは、オプションのグループを設定するために使用できる単なる通常の水平線です。セパレータは選択としてカウントされるため、すでに 3 つの選択がある場合にセパレータを追加すると、セパレータは位置 3 (0 から数えて) を占めます。
.delete(
index1
, index2
=None)
このメソッドは、 から までの番号が付いたオプションを削除します。許容する。オプションを削除するには、パラメータを省略します。このメソッドを使用してティアオフ コンテンツ選択を削除することはできませんが、オブジェクトのティアオフ オプションを 0 に設定することで削除できます。index1
index2
index2
.entrycget(
index
, coption)
選択対象のオプション の現在の値を取得するには、選択のインデックスを目的のオプションの名前に設定してこのメソッドを呼び出します。index
coption
.entryconfigure(
index
, coption, ...)
optionの現在値 を変更するには、このメソッドを呼び出して、選択範囲のインデックスと 1 つ以上の引数を設定します。index
coption
=value
.index(
i
)
インデックスで指定されたオプションの位置を返します。たとえば、最後のオプション (またはオプションがない場合) のインデックスを見つけるために使用できます。i
.index(tk.END)
None
.insert_cascade(
index
, coption, ...)
0 から数えて指定された位置に新しいカスケードを挿入します。その位置以降の選択は 1 つ下にシフトされます。オプションは上記と同じです。index
.add_cascade()
.insert_checkbutton(
index
, coption, ...)
指定した位置に索引
新しいチェックボタンを挿入します。オプションは上記と同じです。.add_checkbutton()
.insert_command(
index
, coption, ...)
位置に新しいコマンドを挿入します。オプションは上記と同じです。index
.add_command()
.insert_radiobutton(
index
, coption, ...)
新しいラジオ ボタンをその位置に挿入します。オプションは上記と同じです。index
.add_radiobutton()
.insert_separator(
index
)
指定された位置に新しいセパレータを挿入します。index
.invoke(index)
位置選択時に関連付けられたコールバックを呼び出します。チェックボックスの場合、その状態は設定とクリアの間で切り替わります。ラジオ ボタンの場合、選択は設定されます。command
index
.post(
x
, y
)
このメニューはルート ウィンドウを基準とした位置に表示されます。(
x
, y
)
.type(
index
)
、 、 、 、または で指定されたオプションのタイプを返します。index
tk.CASCADE
tk.CHECKBUTTON
tk.COMMAND
tk.RADIOBUTTON
tk.SEPARATOR
tk.TEAROFF
.yposition(
n
)
メニュー オプションの場合、メニューの上部を基準とした垂直オフセットをピクセル単位で返します。このメソッドの目的は、現在のマウスの位置を基準にしてポップアップ メニューを正確に配置できるようにすることです。n
th
15.1. itemCreate() オプションMenu
coption
上記のメニュー メソッドで許可されている限り、キーが目的の値を持つパラメータとしてオプション名を使用することで、以下のオプション名のいずれかに値を適用できます。たとえば、コマンドのテキストを赤い文字で表示するには、メソッド呼び出しのオプションとして「」を使用します。coption
foreground='red'
add_command
表 24.菜单
項目の选项
値
accelerator |
右側に「」キーストロークの組み合わせメニュー オプションを表示します。オプション「」を使用します。ここで、表示される文字が含まれています。たとえば、アクセラレータとして Control-X を使用するようにコマンドに指示するには、オプション "" を使用します。このオプションは実際にはアクセラレータを実装しないことに注意してください。これにはキーストローク バインディングを使用します。accelerator accelerator=
accelerator='^X' |
activebackground |
選択に使用される背景色はマウスの下にあります。 |
activeforeground |
選択に使用される前景色はマウスの下にあります。 |
background |
選択時に使用される背景色はマウスの下にありません。これをと短縮することはできないことに注意してください 。bg |
bitmap |
このオプションで表示するビットマップ; 「ビットマップ」を参照してください。 |
columnbreak |
通常、すべてのオプションはオプションの長い列に表示されます。設定すると、このオプションには以前の選択内容が含まれるようになります。columnbreak=1 |
columnbreak |
この選択に対して新しいオプション列を開始するには、オプション "" を使用します。columnbreak=True |
command |
このオプションがアクティブな場合。 |
compound |
メニュー オプションにテキストとグラフィックス (ビットマップまたはイメージ) の両方を表示する場合は、このオプションを使用して、テキストに対するグラフィックスの位置を指定します。値は、、、、または のいずれかです。たとえば、値を "" にすると、グラフィックがテキストの上に配置されます。coption tk.LEFT tk.RIGHT tk.TOP tk.BOTTOM tk.CENTER tk.NONE compound=tk.TOP |
font |
テキストのレンダリングに使用されるフォント。セクション5.4「タイプフォント」を参照してください。label |
foreground |
マウスを使用していないときに選択に使用される前景色。これをと短縮することはできないことに注意してください。fg |
hidemargin |
デフォルトでは、隣接するメニューのオプションを区切る余白が小さくなります。このマージンを抑制するには、「」を使用します。たとえば、選択範囲がパレット上の色見本である場合、このオプションにより、他の中間色を使用せずに色見本がタッチされます。coption hidemargin=True |
image |
このオプションを示す画像 (セクション5.9「画像」を参照)。 |
label |
このオプションに対して表示するテキスト文字列。 |
menu |
このオプションは、カスケード選択にのみ使用されます。これをオブジェクトに設定すると、次のレベルの選択が表示されます。Menu |
offvalue |
通常、チェックボックスがオフの場合、チェックボックスの制御変数は に設定されます。このオプションを希望の値に設定できます。「制御変数: ウィジェットの背後にある値」を参照してください。0 |
onvalue |
通常、チェックボタンがオンの場合、チェックボックスの制御変数は に設定されます。このオプションを希望の値に設定できます。1 |
selectcolor |
通常,颜色显示在一组中 复选按钮或单选按钮为红色。改变它 通过将此选项设置为颜色来着色 要;请参见第 5.3 节 “颜色”。 |
selectimage |
如果您正在使用该选项 在菜单上显示图形而不是文本 单选按钮或复选按钮,如果使用 ,则当项目为 选择。image selectimage=
|
state |
通常,所有选择都会对鼠标单击做出反应,但是 您可以设置为灰色 它出来并使其无响应。这将是鼠标悬停在选择上时。state=tk.DISABLED coption tk.ACTIVE |
underline |
通常,其中没有字母带有下划线。设置此选项 到字母的索引以强调 信。label |
value |
指定关联控件的值 变量(请参见第 52 节 “控制变量:小部件后面的值”),用于单选按钮。 如果控制变量为 一个 ,或一个字符串,如果 控制变量为 .IntVar StringVar |
variable |
对于复选按钮或单选按钮,此选项 应设置为关联的控制变量 带有复选按钮或单选按钮组。 请参见第 52 节 “控制变量:小部件背后的值”。 |
15.2. 顶级菜单
特别是在MacOS下,有时需要 创建显示为顶级菜单的菜单 窗。为此,请按照下列步骤操作。
-
使用任何小部件,使用该方法获取顶级窗口。
W
W
.winfo_toplevel() -
创建小部件,使用 顶级窗口作为第一个参数。
Menu
-
添加到此微件的项目 将显示在应用程序的顶部。
Menu
下面是一个简短的示例。假设它是应用程序实例,一个类的实例 继承自 。此代码将 创建名为“帮助”的顶级菜单选项,其中包含一个名为 “关于”那叫 名为 的处理程序:self
Frame
self.__aboutHandler
top = self.winfo_toplevel()
self.menuBar = tk.Menu(top)
top['menu'] = self.menuBar
self.subMenu = tk.Menu(self.menuBar)
self.menuBar.add_cascade(label='Help', menu=self.subMenu)
self.subMenu.add_command(label='About', command=self.__aboutHandler)
行为会有一些变化,具体取决于您的 平台。
-
在 Windows 或 Unix 系统下,顶级菜单 选项显示在应用程序主节点的顶部 窗。
-
在 MacOS X 下,顶级菜单选项显示在 应用程序处于活动状态时的屏幕顶部, 就在Mac用户希望看到它们的地方。
您必须使用该方法 对于顶部菜单栏上所需的所有项目。 对 、 或的调用将被忽略。
.add_cascade()
.add_checkbutton()
.add_command()
.add_radiobutton()
16. 小部件Menubutton
菜单按钮是下拉菜单中保持打开状态的一部分 屏幕一直。每个菜单按钮都是关联的 带有一个小部件(见上文),可以 显示该菜单的选项按钮,当用户 点击它。Menu
要在根窗口或框架中创建菜单按钮:parent
w = tk.Menubutton( parent , option , ...)
构造函数返回新小部件。选项:Menubutton
表 25.菜单按钮
小部件选项
activebackground |
鼠标悬停在 菜单按钮。请参见第 5.3 节 “颜色”。 |
activeforeground |
鼠标悬停在菜单按钮上时的前景色。 |
anchor |
此选项控制文本的位置 如果小部件的空间大于文本需要的空间。 缺省值为 ,这 使文本居中。有关其他选项,请参见第 5.5 节 “锚点”。例如,如果使用 ,则文本将居中 靠在小部件的左侧。anchor=tk.CENTER anchor=tk.W |
bg 或background |
鼠标不在菜单按钮上时的背景色。 |
bitmap |
要在菜单按钮上显示位图,请设置此项 位图名称选项;请参见第 5.7 节 “位图”。 |
bd 或borderwidth |
菜单按钮周围的边框宽度。违约 是两个像素。有关可能的值,请参见第 5.1 节 “维度”。 |
compound |
如果同时指定文本和图形( 位图或图像),此选项指定位置 图形相对于文本显示。可能 值为 (默认值)、、、、 和 。例如,将定位图形 在文本的右侧。如果指定 ,则显示图形 但(如果有的话)不是。tk.NONE tk.TOP tk.BOTTOM tk.LEFT tk.RIGHT tk.CENTER compound=tk.RIGHT compound=tk.NONE text |
cursor |
鼠标悬停在此位置上时出现的光标 菜单按钮。请参见第 5.8 节 “游标”。 |
direction |
通常,菜单将显示在 菜单按钮。设置为 在按钮左侧显示菜单;用于显示菜单 在按钮的右侧;或用于放置上面的菜单 按钮。direction=tk.LEFT direction=tk.RIGHT direction='above' |
disabledforeground |
禁用此菜单按钮时显示的前景色。 |
fg 或foreground |
鼠标不在菜单按钮上时的前景色。 |
font |
指定用于显示 ;请参见第 5.4 节 “键入字体”。text |
height |
菜单按钮的高度(以文本行为单位)(不是像素! 默认设置是使菜单按钮的大小适合其 内容。 |
highlightbackground |
焦点的颜色 当小组件没有焦点时突出显示。请参见第 53 节 “焦点:路由键盘输入”。 |
highlightcolor |
颜色显示在 当小组件具有焦点时,焦点突出显示。 |
highlightthickness |
焦点突出显示的厚度。 |
image |
要在此菜单上显示图像按钮,请设置此 图像对象的选项。请参见第 5.9 节 “图像”。 |
justify |
此选项控制文本在以下情况下的位置 文本未填充菜单按钮:用于左对齐文本 (这是默认值);用于居中或右对齐。justify=tk.LEFT justify=tk.CENTER justify=tk.RIGHT |
menu |
要将菜单按钮与一组选项相关联, 将此选项设置为对象 包含这些选择。该菜单对象必须 已通过传递关联的 菜单按钮作为构造函数的第一个 论点。有关显示如何 关联菜单按钮和菜单。Menu |
padx |
在左右边留多少空间 菜单按钮的文本。默认值为 1。 |
pady |
在文本上方和下方留出多少空间 菜单按钮。默认值为 1。 |
relief |
通常,菜单按钮将具有外观。有关其他 3-D 效果,请参见第 5.6 节 “浮雕样式”。tk.RAISED |
state |
通常,菜单按钮响应鼠标。设置为灰显 菜单按钮并使其无响应。state=tk.DISABLED |
takefocus |
通常,菜单按钮不占用键盘焦点 (请参见第 53 节 “焦点:路由键盘输入”)。用于将菜单按钮添加到 焦点遍历顺序。takefocus=True |
text |
要在菜单按钮上显示文本,请设置此选项 到包含所需文本的字符串。 字符串中的换行符 () 将导致换行符。'\n' |
textvariable |
クラスの制御変数をこのメニュー ボタンに関連付けることができます。この制御変数を設定すると、表示されるテキスト メッセージが変更されます。「制御変数: ウィジェットの背後にある値」を参照してください。StringVar |
underline |
通常、下線付きのメニュー ボタンは、その上のテキストの下には表示されません。アンダースコア文字の 1 つに対して、このオプションをその文字に設定します。 |
width |
メニュー ボタンの幅(ピクセルではなく文字単位)。このオプションが設定されていない場合、ラベルのサイズはコンテンツに合わせて変更されます。 |
wraplength |
通常、行は折り返されません。このオプションを文字数に設定すると、すべての行がこの数を超えない断片に分割されます。 |
以下は、メニュー ボタンとそれに関連付けられた 2 つのチェックボックスを含むメニューを示す短い例です。
self.mb = tk.Menubutton(self, text='condiments',
relief=RAISED)
self.mb.grid()
self.mb.menu = tk.Menu(self.mb, tearoff=0)
self.mb['menu'] = self.mb.menu
self.mayoVar = tk.IntVar()
self.ketchVar = tk.IntVar()
self.mb.menu.add_checkbutton(label='mayo',
variable=self.mayoVar)
self.mb.menu.add_checkbutton(label='ketchup',
variable=self.ketchVar)
この例では、 というラベルのメニュー ボタンを作成します。クリックすると、 と というラベルの付いた 2 つのチェック ボタンがドロップダウンします。condiments
mayo
ketchup