2016-02-04 2 views
4

Мне было интересно, был ли способ вызвать вызов из ttk.Combobox, когда пользователь выбирает элемент из раскрывающегося списка. Я хочу проверить, какое значение имеет значение combobox при щелчке элемента, чтобы я мог отображать соответствующее значение словаря с помощью клавиши 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)` 

Последняя строка явно не работает, так как нет «команды» для ComboBoxes, но я не совсем уверен, что мне нужно сделать здесь, чтобы получить, чтобы работать. Любая помощь будет оценена по достоинству.

ответ

7

Вы можете привязать к <<ComboboxSelected>> событию, которое будет срабатывать всякий раз, когда изменяется значение ComboBox.

def TextBoxUpdate(event): 
    ... 
FriendListComboBox.bind("<<ComboboxSelected>>", TextBoxUpdate) 
+0

Спасибо! Это именно то, что мне нужно. – Marek

1

Использовать 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 изменяет