「Python3」Tkinter Ver.8.6(Comboboxの作成と設定方法)

Tkinter Python

Comboboxとは?

Comboboxは、Entryと同じように入力することができるだけでなく、設定されている選択肢から選ぶこともできるようなウィジェットになっています。

Comboboxの実装

<ソースコード>
from tkinter import *
from tkinter import ttk
from tkinter import font

def button_push():
    print(combobox1.get())
    print(combobox2.get())

def postcommand():
    print(combobox1.get())

#メインウィンドウ生成
root = Tk()
#ウィンドウのタイトル
root.title('Application')
#Frame生成
frame = ttk.Frame(
    root,
    padding = (10, 10)
    )
#Font生成
font = font.Font(
    size = 18
)
#Label生成
label = ttk.Label(
        frame,
        text = '今日は何曜日?', #表示する文字
        width = str('今日は何曜日?'), #横幅
        anchor=N, #位置
        padding = (20, 0) #隙間
        )

#Combobox生成
combobox1 = ttk.Combobox(
    frame,
    font = font, #文字スタイル
    exportselection = False, #ウィジェットの選択をウィンドウマネージャの選択とリンクさせるか設定
    width = 20, #幅
    height = 5, #高さ
    postcommand = postcommand, #コンボボックスを選択する直前に呼び出される関数を指定
    state = 'readonly', #編集不可
    values = ['Sunday','Manday','Tuesday','Wednesday','Thursday','Friday','Saturday'] #表示リスト設定
)
#Combobox初期値設定
combobox1.current(0) #初期値:Sunday

#文字以外入力不可に設定
def validate(action, index, value_if_allowed,
        prior_value, text, validation_type, trigger_type, widget_name):
    if text in "abcdefghijklmnopqrstuvwxyz":
        try:
            str(value_if_allowed)
            return True
        except ValueError:
            return False
    else:
            return False

vcmd = (
    root.register(validate),
    '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W'
    )

combobox2 = ttk.Combobox(
    frame,
    exportselection = False, #ウィジェットの選択をウィンドウマネージャの選択とリンクさせるか設定
    width = 20, #幅
    values = [
        'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
        'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
        'ccccccccccccccccccccccccccccccccccccccccccccccccccccccc',
        'ddddddddddddddddddddddddddddddddddddddddddddddddddddddd',
        'eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee',
    ], #表示リスト設定
    validate = 'key', #入力値の判定タイミングを指定
    validatecommand = vcmd, #判定する関数を指定
)
#Scrollbar生成
scrollbar = ttk.Scrollbar(
    frame,
    orient = "horizontal",
    command = combobox2.xview
)
combobox2['xscrollcommand'] = scrollbar.set

button = ttk.Button(
    frame,
    text = 'OK', #表示する文字
    width = str('OK'), #横幅
    padding = (20, 0), #隙間
    command = button_push #押されたら実行する関数
)

#ウィンドウ内にFrameを表示
frame.grid()
#Frame内にLabelを表示
label.grid()
#Frame内にComboboxを表示
combobox1.grid(row = 0)
combobox2.grid(row = 1)
#Frame内にScrollbarを表示(左右引き延ばし)
scrollbar.grid(row = 2, sticky = (W, E))
#Frame内にButtonを表示
button.grid(row = 4)

#ウィンドウ表示
root.mainloop()
<出力結果>

Combobox 説明01
Combobox 説明02
Combobox 説明03

# ボタン押すと
Sunday
asdhhsghsdhafgasdfgasdfasdfafadsfsafa

コンボボックスは、デフォルトでは入力が可能になっていますが、”state = ‘readonly'”と設定することで、入力を不可能にすることができます。
“combobox.current(0)”と、初期値を設定することで、空の状態を防ぐことができます。

Comboboxオプションを表にまとめます。

オプション 説明
text ウィジェット内に表示されるテキスト text = ‘OK’
textvariable テキストを格納するオブジェクトを指定
width 横幅 width = 20
height 高さ height = 20
font 文字のスタイル
values 表示リストデータ設定 value = ‘A’
justify 文字揃え位置(right, center, left) justify =”right”
postcommand コンボボックスを選択する直前に呼び出される関数を指定 postcommand = 関数
invalidcommand 入力値が正しくない場合に実行する関数を指定 invalidcommand = 関数
validate 入力値の判定タイミングを指定 validate = ‘key’
validatecommand 判定する関数を指定 validatecommand = 関数
show 置き換え文字指定 show = “*”
style スタイル
state 状態(normal, active, disabled) state = “normal”
xscrollcommand スクロールバーの設定 xscrollcommand = scrollbar.set

“validatecommand”オプションを表にまとめます。

代数 返り値の内容
‘%d’ アクションコード
1: 挿入
0: 削除
-1: フォーカスイン/アウト、textvariableの変化
‘%i’ インデックス
0以上: 挿入/削除しようとしたカーソルの位置
-1: カーソル位置の関係ないアクション
‘%P’ 変更を許可した場合の文字列
‘%s’ 変更前の文字列
‘%S’ 挿入または削除した文字列
‘%v’ Entryに設定された発火条件
‘focus’, ‘focusin’, ‘focusout’, ‘key’, ‘all’, ‘none’
‘%V’ コールバックした理由
‘focusin’, ‘focusout’, ‘key’, ‘forced’
‘%W’ ウィジェット名の文字列

“validate”オプションを表にまとめます。

場合
‘focus’ フォーカスを得るか失うかしたとき
‘focusin’ フォーカスを得たとき
‘focusout’ フォーカスを失うとき
‘key’ キーボード入力のとき
‘all’ 理由を問わず、入力内容に変化が生じたとき
‘none’ 何もしない

“state”オプションを表にまとめます。

stateオプション 説明
normal 通常の状態
active マウスカーソルがウィジェットの上にあり、マウスをクリックすることで何らかの動作をさせる
disabled プログラムによってウィジェットを無効化する
focus ウィジェットにキーボードフォーカスをする
pressed ウィジェットは押されている
selected チェックボタンやラジオボタンのようなウィジェットでの “オン” や “チェック有” や “選択中” に当たる
background Windows と Mac には “アクティブな” もしくは最前面のウィンドウという概念がある
背面のウィンドウにあるウィジェットには background 状態が設定され、最前面のウィンドウにあるウィジェットでは解除される
readonly ウィジェットはユーザからの変更を受け付けない
alternate ウィジェット特有の切り替え表示
invalid ウィジェットの値が不正

“style”オプションを表にまとめます。

styleオプション 説明
foreground 文字の色 foreground = “#ff0000″又は、foreground = “red”
background 背景の色 background = “#0000ff”又は、foreground = “blue”

コメント

タイトルとURLをコピーしました