tkinter.(ttk.)OptionMenu【オプションメニュー (ドロップダウンリスト)】
メモ ( 作成 例 選択値の取得・設定 例 各種設定 例 ) オプション メソッド 例
メモ
- オプションメニュー (ドロップダウンリスト) の作成〔 例 〕
- tkinter.OptionMenu:従来のウィジェット
- tkinter.ttk.OptionMenu:テーマ付きウィジェット
- 他のウィジェットと作りが違う為、コンストラクタの引数等に注意
- 選択値の取得・設定〔 例 〕
- 取得 (選択時):command【値選択処理関数】を指定して、選択時に取得
- 取得 (任意):textvariable【値テキスト用ウィジェット変数】 または text【値テキスト】 を参照
- 初期設定 ttk:コンストラクタのデフォルト値
- 設定:textvariable【値テキスト用ウィジェット変数】の値設定
- 各種設定 (フォント・配置・色 等)〔 例 〕
- ドロップダウン部以外:ウィジェットのconfig( )【オプション 設定・取得】
- ドロップダウン部:menu【ドロップダウンメニュー】 の config( )【オプション 設定・取得】・entryconfigure( )【要素オプション取得・設定】で設定
外部リンク
オプション
メモ
- オプションの設定方法
- コンストラクタで辞書型引数 (tk のみ)・キーワード引数として指定
- オプション名を辞書インデックスとして指定 ( widget ['オプション名'] )
- config・configure【オプション設定・取得】で辞書型引数・キーワード引数として指定
- オプション関連のメソッド
- オプション関連メソッド
- Style.configure( ):Style に設定した値
- 注) 実装依存 (各種ドキュメントに相違があり)
オプション 一覧
個別 | tk | ttk | 説明 |
---|---|---|---|
command | ○ | ○ | 値選択処理関数 (引数:選択値) |
direction | ▲ | Config | 選択値表示位置 ・'above':上側 ・'below':下側 ・'left':左側 ・'right':右側 ・'flush':同じ位置 |
menu | ▲ | ▲ | 選択値を表示するドロップダウンメニュー |
state | ▲ | ▲ | 状態 (tk 互換用 ttk:(stateflags)【状態フラグ】を上書き) ・NORMAL【通常状態】 ・DISABLED【無効状態】:押下不可 |
(stateflags) | state( ) 〔詳細〕 | 状態フラグ (組合せ:state【状態】の変更なし) ・(なし):通常状態 ・'active':アクティブ状態 ・'disabled':無効状態 | |
テキスト・画像 | tk | ttk | 説明 |
font | ▲ | Style | フォント (tkinter.Font) |
text | ▲ | ▲ | 値テキスト |
textvariable | ▲ | ▲ | 値テキスト用ウィジェット変数 |
compound | ▲ | ▲ | テキストと画像の合成 ( テキスト対しての画像位置 ) |
bitmap | ▲ | ビットマップ画像 ( image【画像】を優先 ) | |
image | ▲ | ● | 画像 ( bitmap【ビットマップ画像】 より優先 ) |
外観 | tk | ttk | 説明 |
borderwidth (bd) | ▲ | Style | 境界線の幅 |
indicatoron | ▲ | インジケータの表示有無 (True:表示 / False:非表示) | |
relief | ▲ | Style | 外観 |
サイズ・配置 | tk | ttk | 説明 |
height | ▲ | 高さ (省略:自動計算) 文字のみ:行数 画像あり:ピクセル数 | |
width | ▲ | ▲ | 幅 (省略・0:自動計算 / 負:最小幅) 文字のみ:文字数 画像あり:ピクセル数 |
anchor | ▲ | Style | テキスト等の配置位置 (デフォルト:LEFT【左端揃え】ttk / CENTER【中央】tk ) |
justify | ▲ | Style | 複数行テキストの揃え ・LEFT【左端揃え】(デフォルトttk ) ・CENTER【中央揃え】(デフォルトtk ) ・RIGHT【右端揃え】 |
padding | ▲ | 内部間隔のリスト (左端・上端・右端・下端の順) | |
padx | ▲ | x方向の内部間隔 (ピクセル単位 等) | |
pady | ▲ | y方向の内部間隔 (ピクセル単位 等) | |
wraplength | ▲ | Style | ワードラップの幅 (スクリーン座標系単位) (0以下:折り返しなし) |
色 関連 | tk | ttk | 説明 |
background (bg) | ▲ | Style (―) | 背景色 |
foreground (fg) | ▲ | Style (―) | 前景色 |
activebackground | ▲ | Style.map() [background] | アクティブ状態の背景色 |
activeforeground | ▲ | Style.map() [foreground] | アクティブ状態の前景色 |
(disabledbackground) | Style.map() [background] | 無効状態の背景色 | |
disabledforeground | ▲ | Style.map() [foreground] | 無効状態の前景色 |
highlightbackground | ▲ | Style | 外枠の色 (入力フォーカスなし) |
highlightthickness | ▲ | Style | 外枠の幅 (入力フォーカス用) |
highlightcolor | ▲ | Style | 外枠の色 (入力フォーカスあり) |
共通 | tk | ttk | 説明 |
cursor | ▲ | ▲ | マウスカーソル名 |
style | Config | スタイル名 (TMenubutton) | |
takefocus | ▲ | ▲ | [Tab]キー等でのフォーカス移動の有無〔フォーカス〕 ・'' (空文字列):自動設定 ・False:なし (スキップ) ・True:あり (タブストップ) |
underline | ▲ | ▲ | 下線の文字位置 (0~) (ショートカットキー用:実装は別途必要) |
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
○:コンストラクタでのみ指定可能
▲:config( ) 等でのみ指定可能
Config:コンストラクタ 及び config( ) 等で指定可能
Style:Style でのみ指定可能
Method:メソッドの引数で指定
Default:デフォルト値
:テーマ依存
動的外観変更〔 例 〕
style.map (スタイル名, 対象 = [(状態, 状態の値)])
対象 | 状態 | オプション | 備考 |
---|---|---|---|
background 【背景色】 | active【アクティブ状態】 | activebackground | |
disabled【無効状態】 | (disabledbackground) | ||
foreground 【前景色】 | active【アクティブ状態】 | activeforeground | |
disabled【無効状態】 | disabledforeground |
色 | 説明 |
---|---|
'色名' | 色名:'red'・'green'・'blue'・'gray0'~'gray100'・'system~' 等 下記参照 Tcl8.6/Tk8.6 - Tk Commands - colors (同名色でも HTML5:カラー定義 と定義に差異あり) |
'#RGB' | 16進 4ビット |
'#RRGGBB' | 16進 8ビット |
'#RRRGGGBBB' | 16進 12ビット |
'#RRRRGGGGBBBB' | 16進 16ビット |
配置位置の詳細 ( anchor )
配置位置 | 説明 |
---|---|
'配置位置' | 東西南北 (news) を使用した8方向 と 中央の文字列 下記参照 |
'nw' NW | 'n' N | 'ne' NE |
'w' W | 'center' CENTER | 'e' E |
'sw' SW | 's' S | 'se' SE |
マウスカーソル名の詳細 ( cursor )
マウスカーソル名 | 説明 |
---|---|
'マウスカーソル名' | 下記参照 ('arrow'・'wait' 等) Tcl8.6/Tk8.6 - Tk Commands - cursors (英語) Tkinter 8.5 reference: a GUI for Python - Cursors (英語) |
テキストと画像の合成の詳細 ( compound )
指定値 | 説明 (テキスト対しての画像位置) |
---|---|
'text' ttk | テキストのみ表示 |
'image' ttk | 画像のみ表示 |
NONE | テキストの代わりに画像表示 |
BOTTOM | 画像をテキストの下側に表示 |
TOP | 画像をテキストの上側に表示 |
LEFT | 画像をテキストの左側に表示 |
RIGHT | 画像をテキストの右側に表示 |
CENTER | 画像をテキストの上に表示 |
ビットマップ画像の詳細 ( bitmap )
指定値 | 説明 |
---|---|
@ファイル名 | 標準X11形式 ビットマップ ファイル名 |
組み込み画像名 | 下記参照 ('error'・'hourglass'・'info'・'question'・'warning' 等) Tcl8.6/Tk8.6 - Tk C API - GetBitmap (英語) Tkinter 8.5 reference: a GUI for Python - Bitmaps (英語) |
内部間隔リストの詳細 ( padding )
指定値 | 説明 |
---|---|
[内部間隔 (左), 内部間隔 (上), 内部間隔 (右), 内部間隔 (下)] | 内部間隔の指定 (左から時計回り) |
[内部間隔 (左), 内部間隔 (上・下), 内部間隔 (右)] | |
[内部間隔 (左・右), 内部間隔 (上・下)] | |
内部間隔 (上・下・左・右) |
外観の詳細 ( relief )
外観 | 説明 |
---|---|
FLAT | フラット |
GROOVE | 凹み枠 |
RAISED | 隆起 (凸) |
RIDGE | 隆起枠 (凸枠) |
SOLID | 実線 |
SUNKEN | 凹み |
メソッド
コンストラクタ | 備考 |
---|---|
OptionMenu(master, variable , value, *values , **kwargs) ttk.OptionMenu(master, variable , default=None, *values , **kwargs) | コンストラクタ master親 (tkinter.Tk【トップレベルウィンドウ】・コンテナウィジェット) variable値用ウィジェット変数 defaultデフォルト値 valueドロップダウンメニューの選択値 (1個目) valuesドロップダウンメニューの選択値 (複数可) kwargs (キーワード引数)オプション (複数可) |
固有メソッド | 備考 |
set_menu(default=None, *values) ttk | 選択値 設定 defaultデフォルト値 valuesドロップダウンメニューの選択値 (複数可) |
共通メソッド (抜粋) 〔詳細はリンク先〕 | 備考 |
cget( 'option' ) widget['option'] | オプション値 取得 下の構文はオプション値の設定も可 |
config( ~ ) configure( ~ ) | オプション 設定・取得 |
pack( ~ ) | 配置 (パック形式) |
grid( ~ ) | 配置 (グリッド形式) |
place( ~ ) | 配置 (座標形式) |
state( ~ ) ttk | 状態フラグ 取得・設定 |
instate( ~ ) ttk | 状態フラグ チェック |
例
作成
import tkinter as tk
import tkinter.ttk as ttk
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("240x120")
lst = ["Value A", "Value B", "Value C"]
# OptionMenu
var_option = tk.StringVar(value=lst[0])
optionmenu = tk.OptionMenu(
root,
var_option,
#"Value A", "Value B", "Value C", # Python 8.5 未満
*lst, # Python 8.5 以上
)
optionmenu.pack(side=tk.LEFT, padx=10, pady=10, anchor=tk.N)
# ttk.OptionMenu
var_option_ttk = tk.StringVar()
optionmenu_ttk = ttk.OptionMenu(
root,
var_option_ttk,
lst[0],
#"Value A", "Value B", "Value C", # Python 8.5 未満
*lst, # Python 8.5 以上
)
optionmenu_ttk.pack(side=tk.LEFT, padx=10, pady=10, anchor=tk.N)
# メインループ
root.mainloop()
選択値の取得・設定
import tkinter as tk
import tkinter.ttk as ttk
def select(value):
var_msg.set(value)
def get():
msg = var_option.get() + " / " + optionmenu['text']
msg += "\n" + var_option_ttk.get() + " / " + optionmenu_ttk['text']
var_msg.set(msg)
# トップレベルウィンドウ作成
root = tk.Tk()
lst = ["Value A", "Value B", "Value C"]
# OptionMenu
var_option = tk.StringVar()
var_option.set(lst[1])
optionmenu = tk.OptionMenu(
root,
var_option,
*lst,
command=select,
)
optionmenu.pack(padx=10, pady=10)
# ttk.OptionMenu
var_option_ttk = tk.StringVar()
optionmenu_ttk = ttk.OptionMenu(
root,
var_option_ttk,
lst[2],
*lst,
command=select,
)
optionmenu_ttk.pack(padx=10, pady=10)
# Button
button = ttk.Button(
root,
command=get,
text="Get",
)
button.pack(padx=10, pady=10)
# Label
var_msg = tk.StringVar(value="var_msg")
label = ttk.Label(
root,
textvariable=var_msg,
relief=tk.SUNKEN,
)
label.pack(side=tk.BOTTOM, fill=tk.X)
# メインループ
root.mainloop()
各種設定 (フォント・配置・色 等)
動的外観変更
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import font
# トップレベルウィンドウ作成
root = tk.Tk()
root.geometry("300x150")
font_std = font.Font(size=12, weight="bold")
lst = ["Value A", "Value B", "Value C"]
# OptionMenu
var_option = tk.StringVar(value=lst[0])
optionmenu = tk.OptionMenu(
root,
var_option,
*lst
)
optionmenu['font'] = font_std
optionmenu['width'] = 10
optionmenu['anchor'] = tk.E
optionmenu['justify'] = tk.RIGHT
optionmenu['background'] = "lightgreen"
optionmenu['foreground'] = "blue"
menu = optionmenu['menu']
menu.config(font=font_std)
for index in range(menu.index(tk.END)+1):
if index % 2 == 0:
menu.entryconfigure(index, background="lightgreen")
menu.entryconfigure(index, foreground="blue")
optionmenu.pack(side=tk.LEFT, padx=10, pady=10, anchor=tk.N)
# ttk.OptionMenu
style = ttk.Style()
style.configure(
"example.TMenubutton",
font=font_std,
anchor=tk.E,
justify=tk.RIGHT,
background="lightgreen",
foreground="blue",
)
style.map(
"example.TMenubutton",
background=[
('active', "green"),
('disabled', "orange"),
],
foreground=[
('active', "orange"),
('disabled', "green"),
],
)
var_option_ttk = tk.StringVar()
optionmenu_ttk = ttk.OptionMenu(
root,
var_option_ttk,
lst[0],
*lst,
style="example.TMenubutton",
)
optionmenu_ttk['width'] = 10
menu = optionmenu_ttk['menu']
menu.config(font=font_std)
for index in range(menu.index(tk.END)+1):
if index % 2 == 0:
menu.entryconfigure(index, background="lightgreen")
menu.entryconfigure(index, foreground="blue")
optionmenu_ttk.pack(side=tk.LEFT, padx=10, pady=10, anchor=tk.N)
# メインループ
root.mainloop()