ユーザーがドロップダウンリストからアイテムを選択したときに、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)`
コンボボックスの「コマンド」がないため、最後の行は明らかに機能しませんが、それを機能させるためにここで何をする必要があるのかよくわかりません。どんな助けでもいただければ幸いです。
コンボボックスの値が変更されるたびに発生する<<ComboboxSelected>>
イベントにバインドできます。
def TextBoxUpdate(event):
...
FriendListComboBox.bind("<<ComboboxSelected>>", TextBoxUpdate)
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が変更されると、コールバック関数が呼び出されます