web-dev-qa-db-ja.com

ttk.Comboboxコールバックを作成する方法

ユーザーがドロップダウンリストからアイテムを選択したときに、ttk.Comboboxからコールバックを呼び出す方法があるかどうか疑問に思いました。アイテムがクリックされたときのコンボボックスの値を確認して、コンボボックスキーを指定して関連する辞書の値を表示できるようにします。

import Tkinter
import ttk

FriendMap = {}
UI = Tkinter.Tk()
UI.geometry("%dx%d+%d+%d" % (330, 80, 500, 450))
UI.title("User Friend List Lookup")

def TextBoxUpdate():
    if not  FriendListComboBox.get() == "":
        FriendList = FriendMap[FriendListComboBox.get()]
        FriendListBox.insert(0,FriendMap[FriendListComboBox.get()])`

#Imports the data from the FriendList.txt file
with open("C:\Users\me\Documents\PythonTest\FriendList.txt", "r+") as file:
for line in file:
    items = line.rstrip().lower().split(":")
    FriendMap[items[0]] = items[1]

#Creates a dropdown box with all of the keys in the FriendList file
FriendListKeys = FriendMap.keys()
FriendListKeys.sort()
FriendListComboBox = ttk.Combobox(UI,values=FriendListKeys,command=TextBoxUpdate)`

コンボボックスの「コマンド」がないため、最後の行は明らかに機能しませんが、それを機能させるためにここで何をする必要があるのか​​よくわかりません。どんな助けでもいただければ幸いです。

10
Marek

コンボボックスの値が変更されるたびに発生する<<ComboboxSelected>>イベントにバインドできます。

def TextBoxUpdate(event):
    ...
FriendListComboBox.bind("<<ComboboxSelected>>", TextBoxUpdate)
16
Bryan Oakley

IntVar および StringVar を使用します。

Traceメソッドを使用して、「オブザーバー」コールバックを変数にアタッチできます。内容が変更されるたびにコールバックが呼び出されます。

import Tkinter
import ttk

FriendMap = {}
UI = Tkinter.Tk()
UI.geometry("%dx%d+%d+%d" % (330, 80, 500, 450))
UI.title("User Friend List Lookup")

def TextBoxUpdate():
    if not  FriendListComboBox.get() == "":
        FriendList = FriendMap[FriendListComboBox.get()]
        FriendListBox.insert(0,FriendMap[UserListComboBox.get()])`
def calback():
    print("do something")

#Imports the data from the FriendList.txt file
with open("C:\Users\me\Documents\PythonTest\FriendList.txt", "r+") as file:
for line in file:
    items = line.rstrip().lower().split(":")
    FriendMap[items[0]] = items[1]

#Creates a dropdown box with all of the keys in the FriendList file
value = StringVar()
value.trace('w', calback)
FriendListKeys = FriendMap.keys()
FriendListKeys.sort()
FriendListComboBox =   ttk.Combobox(UI,values=FriendListKeys,command=TextBoxUpdate,textvariable=value)`

comoboxが変更されると、コールバック関数が呼び出されます

2
Mostafa Wattad