【Tkinterシリーズ 06/15】メニューウィジェット

15. ウィジェットMenu

        「ドロップダウン メニュー」は、ユーザーに複数の選択肢を提供する一般的な方法ですが、ユーザーが選択していない場合、アプリケーション画面上の占有スペースは最小限に抑えられます。

  • メニューボタンはアプリケーション上に常に表示されます。

  • メニューは、ユーザーがメニュー ボタンをクリックしたときのみ表示されるオプションのリストです。

  • オプションを選択するには、ユーザーはマウスをメニュー ボタンからオプションの 1 つまで下に移動します。あるいは、メニュー ボタンをクリックして放すこともできます。オプションが表示され、ユーザーがいずれかをクリックするまで表示されたままになります。

  • Tkinter の Unix バージョンは(少なくとも) これをサポートしています。「メニューを切り離します。」 デザイナーが希望すると、オプションの上に点線が表示されます。ユーザーはこの行をクリックしてメニューを「切り離す」ことができます。新しい自己完結型のウィンドウが表示され、その中にオプションが含まれています。

メニュー ボタンを作成してメニュー ウィジェットに接続する方法については、下記のセクション 16「メニュー ボタン ウィジェット」        を参照してください。まず、オプションのリストを表示するウィジェットを見てみましょう。Menu

        メニューに表示されるオプションは次のいずれかです。

        メニュー ウィジェットを作成するには、まずメニュー ウィジェットを作成する必要があります。これを次のように呼びます。Menubuttonmb

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  アイテムのテキストの色。statetk.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(kindcoption, ...)

        指定された新しい要素を、このメニューで次に使用可能なオプションとして追加します。パラメータは、 、 、または のいずれかです。引数に応じて、このメソッドは 、 などと同等です。詳細については、以下のこれらのメソッドを参照してください。kindkind'cascade''checkbutton''command''radiobutton''separator'kind.add_cascade().add_checkbutton()

.add_cascade(coption, ...)

        このメニューで次に使用可能な要素オプションとして新しいカスケード要素を追加します。この呼び出しのオプションを使用して 、メニューの次のレベルであるタイプ オブジェクトにカスケードします。menuMenu

.add_checkbutton(coption, ...)

        次に利用可能なオプションとして新しいチェックボックスを自分自身に追加します。これらのオプションを使用すると、チェックボックスオブジェクトを設定するのとほぼ同じ方法でチェックボックスを設定できます(セクション15.1「メニュー項目作成 (オプション) オプション」を参照してください)。

.add_command(coption, ...)

        次に利用可能なオプション self として新しいコマンドを追加します。メニューにテキストまたは画像を配置するには、 、 オプションを使用します。このオプションが Take の場合、このオプションを使用してこのオプションを接続します。labelbitmapimagecommand

.add_radiobutton(coption, ...)

        次に利用可能なオプションとして新しいラジオ ボタンを追加します。これらのオプションを使用すると、オブジェクトとほぼ同じ方法でラジオ ボタンを設定できます (セクション20「ラジオ ボタン ウィジェット」を参照)。Radiobutton

.add_separator()

        現在定義されている最後のセパレータの後にセパレータの選択を追加します。これは、オプションのグループを設定するために使用できる単なる通常の水平線です。セパレータは選択としてカウントされるため、すでに 3 つの選択がある場合にセパレータを追加すると、セパレータは位置 3 (0 から数えて) を占めます。

.delete(index1index2=None)

        このメソッドは、 から までの番号が付いたオプションを削除します。許容する。オプションを削除するには、パラメータを省略します。このメソッドを使用してティアオフ コンテンツ選択を削除することはできませんが、オブジェクトのティアオフ オプションを 0 に設定することで削除できます。index1index2index2

.entrycget(indexcoption)

選択対象のオプション        の現在の値を取得するには、選択のインデックスを目的のオプションの名前に設定してこのメ​​ソッドを呼び出します。indexcoption

.entryconfigure(indexcoption, ...)

optionの現在値        を変更するには、このメソッドを呼び出して、選択範囲のインデックスと 1 つ以上の引数を設定します。indexcoption=value

.index(i)

        インデックスで指定されたオプションの位置を返します。たとえば、最後のオプション (またはオプションがない場合) のインデックスを見つけるために使用できます。i.index(tk.END)None

.insert_cascade(indexcoption, ...)

        0 から数えて指定された位置に新しいカスケードを挿入します。その位置以降の選択は 1 つ下にシフトされます。オプションは上記と同じです。index.add_cascade()

.insert_checkbutton(indexcoption, ...)

        指定した位置に索引新しいチェックボタンを挿入します。オプションは上記と同じです。.add_checkbutton()

.insert_command(indexcoption, ...)

        位置に新しいコマンドを挿入します。オプションは上記と同じです。index.add_command()

.insert_radiobutton(indexcoption, ...)

        新しいラジオ ボタンをその位置に挿入します。オプションは上記と同じです。index.add_radiobutton()

.insert_separator(index)

        指定された位置に新しいセパレータを挿入します。index

.invoke(index)

        位置選択時に関連付けられたコールバックを呼び出します。チェックボックスの場合、その状態は設定とクリアの間で切り替わります。ラジオ ボタンの場合、選択は設定されます。commandindex

.post(xy)

        このメニューはルート ウィンドウを基準とした位置に表示されます。(xy)

.type(index)

        、 、 、 、または で指定されたオプションのタイプを返します。indextk.CASCADEtk.CHECKBUTTONtk.COMMANDtk.RADIOBUTTONtk.SEPARATORtk.TEAROFF

.yposition(n)

        メニュー オプションの場合、メニューの上部を基準とした垂直オフセットをピクセル単位で返します。このメソッドの目的は、現在のマウスの位置を基準にしてポップアップ メニューを正確に配置できるようにすることです。nth

15.1. itemCreate() オプションMenucoption

        上記のメニュー メソッドで許可されている限り、キーが目的の値を持つパラメータとしてオプション名を使用することで、以下のオプション名のいずれかに値を適用できます。たとえば、コマンドのテキストを赤い文字で表示するには、メソッド呼び出しのオプションとして「」を使用します。coptionforeground='red'add_command

表 24.菜单項目の选项

accelerator 右側に「」キーストロークの組み合わせメニュー オプションを表示します。オプション「」を使用します。ここで、表示される文字が含まれています。たとえば、アクセラレータとして Control-X を使用するようにコマンドに指示するには、オプション "" を使用します。このオプションは実際にはアクセラレータを実装しないことに注意してください。これにはキーストローク バインディングを使用します。acceleratoraccelerator=ssaccelerator='^X'
activebackground 選択に使用される背景色はマウスの下にあります。
activeforeground 選択に使用される前景色はマウスの下にあります。
background 選択時に使用される背景色はマウスの下にありません。これをと短縮することはできないことに注意してください 。bg
bitmap このオプションで表示するビットマップ; 「ビットマップ」を参照してください。
columnbreak 通常、すべてのオプションはオプションの長い列に表示されます。設定すると、このオプションには以前の選択内容が含まれるようになります。columnbreak=1
columnbreak この選択に対して新しいオプション列を開始するには、オプション "" を使用します。columnbreak=True
command このオプションがアクティブな場合。
compound メニュー オプションにテキストとグラフィックス (ビットマップまたはイメージ) の両方を表示する場合は、このオプションを使用して、テキストに対するグラフィックスの位置を指定します。値は、、、、または のいずれかです。たとえば、値を "" にすると、グラフィックがテキストの上に配置されます。coptiontk.LEFTtk.RIGHTtk.TOPtk.BOTTOMtk.CENTERtk.NONEcompound=tk.TOP
font テキストのレンダリングに使用されるフォント。セクション5.4「タイプフォント」を参照してください。label
foreground  マウスを使用していないときに選択に使用される前景色。これをと短縮することはできないことに注意してください。fg
hidemargin デフォルトでは、隣接するメニューのオプションを区切る余白が小さくなります。このマージンを抑制するには、「」を使用します。たとえば、選択範囲がパレット上の色見本である場合、このオプションにより、他の中間色を使用せずに色見本がタッチされます。coptionhidemargin=True
image このオプションを示す画像 (セクション5.9「画像」を参照)。
label このオプションに対して表示するテキスト文字列。
menu このオプションは、カスケード選択にのみ使用されます。これをオブジェクトに設定すると、次のレベルの選択が表示されます。Menu
offvalue 通常、チェックボックスがオフの場合、チェックボックスの制御変数は に設定されます。このオプションを希望の値に設定できます。「制御変数: ウィジェットの背後にある値」を参照してください。0
onvalue 通常、チェックボタンがオンの場合、チェックボックスの制御変数は に設定されます。このオプションを希望の値に設定できます。1
selectcolor 通常,颜色显示在一组中 复选按钮或单选按钮为红色。改变它 通过将此选项设置为颜色来着色 要;请参见第 5.3 节 “颜色”。
selectimage 如果您正在使用该选项 在菜单上显示图形而不是文本 单选按钮或复选按钮,如果使用 ,则当项目为 选择。imageselectimage=II
state 通常,所有选择都会对鼠标单击做出反应,但是 您可以设置为灰色 它出来并使其无响应。这将是鼠标悬停在选择上时。state=tk.DISABLEDcoptiontk.ACTIVE
underline 通常,其中没有字母带有下划线。设置此选项 到字母的索引以强调 信。label
value 指定关联控件的值 变量(请参见第 52 节 “控制变量:小部件后面的值”),用于单选按钮。 如果控制变量为 一个 ,或一个字符串,如果 控制变量为 .IntVarStringVar
variable 对于复选按钮或单选按钮,此选项 应设置为关联的控制变量 带有复选按钮或单选按钮组。 请参见第 52 节 “控制变量:小部件背后的值”。

15.2. 顶级菜单

        特别是在MacOS下,有时需要 创建显示为顶级菜单的菜单 窗。为此,请按照下列步骤操作。

  1. 使用任何小部件,使用该方法获取顶级窗口。WW.winfo_toplevel()

  2. 创建小部件,使用 顶级窗口作为第一个参数。Menu

  3. 添加到此微件的项目 将显示在应用程序的顶部。Menu

        下面是一个简短的示例。假设它是应用程序实例,一个类的实例 继承自 。此代码将 创建名为“帮助”的顶级菜单选项,其中包含一个名为 “关于”那叫 名为 的处理程序:selfFrameself.__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.CENTERanchor=tk.W
bgbackground 鼠标不在菜单按钮上时的背景
bitmap 要在菜单按钮上显示位图,请设置此项 位图名称选项;请参见第 5.7 节 “位图”。
bdborderwidth 菜单按钮周围的边框宽度。违约 是两个像素。有关可能的值,请参见第 5.1 节 “维度”。
compound 如果同时指定文本和图形( 位图或图像),此选项指定位置 图形相对于文本显示。可能 值为 (默认值)、、、、 和 。例如,将定位图形 在文本的右侧。如果指定 ,则显示图形 但(如果有的话)不是。tk.NONEtk.TOPtk.BOTTOMtk.LEFTtk.RIGHTtk.CENTERcompound=tk.RIGHTcompound=tk.NONEtext
cursor 鼠标悬停在此位置上时出现的光标 菜单按钮。请参见第 5.8 节 “游标”。
direction 通常,菜单将显示在 菜单按钮。设置为 在按钮左侧显示菜单;用于显示菜单 在按钮的右侧;或用于放置上面的菜单 按钮。direction=tk.LEFTdirection=tk.RIGHTdirection='above'
disabledforeground 禁用此菜单按钮时显示的前景色。
fgforeground 鼠标不在菜单按钮上时的前景色。
font 指定用于显示 ;请参见第 5.4 节 “键入字体”。text
height 菜单按钮的高度(以文本为单位)(不是像素! 默认设置是使菜单按钮的大小适合其 内容。
highlightbackground 焦点的颜色 当小组件没有焦点时突出显示。请参见第 53 节 “焦点:路由键盘输入”。
highlightcolor 颜色显示在 当小组件具有焦点时,焦点突出显示。
highlightthickness 焦点突出显示的厚度。
image 要在此菜单上显示图像按钮,请设置此 图像对象的选项。请参见第 5.9 节 “图像”。
justify 此选项控制文本在以下情况下的位置 文本未填充菜单按钮:用于左对齐文本 (这是默认值);用于居中或右对齐。justify=tk.LEFTjustify=tk.CENTERjustify=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 つのチェック ボタンがドロップダウンします。condimentsmayoketchup

 

おすすめ

転載: blog.csdn.net/gongdiwudu/article/details/132578239