tkinter.(ttk.)OptionMenu【オプションメニュー (ドロップダウンリスト)】

メモ  ( 作成 選択値の取得・設定 各種設定 オプション メソッド

メモ

OptionMenuのサンプル画像


オプション

メモ

オプション 一覧

個別tkttk説明
command値選択処理関数 (引数:選択値)
directionConfig 選択値表示位置
・'above':上側
'below':下側
・'left':左側
・'right':右側
・'flush':同じ位置
menu 選択値を表示するドロップダウンメニュー
state状態 (tk 互換用 ttk(stateflags)【状態フラグ】を上書き)
NORMAL【通常状態】
DISABLED【無効状態】:押下不可
(stateflags)state( )
詳細
状態フラグ (組合せ:state【状態】の変更なし)
(なし):通常状態
・'active':アクティブ状態
・'disabled':無効状態
テキスト・画像tkttk説明
fontStyleフォント (tkinter.Font)
text 値テキスト
textvariable値テキスト用ウィジェット変数
compoundテキストと画像の合成 ( テキスト対しての画像位置 )
bitmapビットマップ画像 ( image【画像】を優先 )
image画像 ( bitmap【ビットマップ画像】 より優先 )
外観tkttk説明
borderwidth (bd)Style 境界線の幅
indicatoronインジケータの表示有無 (True:表示 / False:非表示)
reliefStyle 外観
サイズ・配置tkttk説明
height高さ (省略:自動計算)
文字のみ:行数
画像あり:ピクセル数
width幅 (省略・0:自動計算 / 負:最小幅)
文字のみ:文字数
画像あり:ピクセル数
anchorStyle テキスト等の配置位置
(デフォルト:LEFT【左端揃え】ttk / CENTER【中央】tk )
justifyStyle 複数行テキストの揃え
LEFT【左端揃え】(デフォルトttk )
CENTER【中央揃え】(デフォルトtk )
RIGHT【右端揃え】
padding内部間隔のリスト
(左端・上端・右端・下端の順)
padxx方向の内部間隔 (ピクセル単位 等)
padyy方向の内部間隔 (ピクセル単位 等)
wraplengthStyleワードラップの幅 (スクリーン座標系単位)
(0以下:折り返しなし)
色 関連tkttk説明
background (bg)Style (―)背景色
foreground (fg)Style (―)前景色
activebackground Style.map()
[background]
アクティブ状態の背景色
activeforeground Style.map()
[foreground]
アクティブ状態の前景色
(disabledbackground) Style.map()
[background]
無効状態の背景色
disabledforeground Style.map()
[foreground]
無効状態の前景色
highlightbackgroundStyle 外枠の (入力フォーカスなし)
highlightthicknessStyle 外枠の幅 (入力フォーカス用)
highlightcolorStyle 外枠の (入力フォーカスあり)
共通tkttk説明
cursorマウスカーソル名
styleConfigスタイル名 (TMenubutton)
takefocus[Tab]キー等でのフォーカス移動の有無〔フォーカス
'' (空文字列):自動設定
False:なし (スキップ)
True:あり (タブストップ)
underline下線の文字位置 (0~)
(ショートカットキー用:実装は別途必要)
凡例
●:各種方法で指定可能
○:コンストラクタでのみ指定可能
▲: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()

OptionMenuのサンプル画像 OptionMenuのサンプル画像


選択値の取得・設定

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()

OptionMenuのサンプル画像


各種設定 (フォント・配置・色 等)
動的外観変更

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()

OptionMenuのサンプル画像 OptionMenuのサンプル画像