Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как сделать обратный вызов ttk.Combobox

Автор вопроса: MarekОтветов: 2

Мне было интересно, есть ли способ вызвать обратный вызов из 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, но я не совсем уверен, что мне нужно сделать здесь, чтобы заставить это работать. Любая помощь будет оценена по достоинству.

pythontkintercomboboxttk

Ответы

Ответ 1 · рейтинг 20 · Bryan Oakley

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

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

Ответ 2 · рейтинг 3 · Mostafa Wattad

Используйте IntVar и StringVar .

Вы можете использовать метод трассировки для присоединения обратных вызовов "наблюдателя" к переменной. Обратный вызов вызывается всякий раз, когда содержимое изменяется:

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы