Как связать функции с виджетами tkinter, которые находятся в списке переменного размера? - PullRequest
0 голосов
/ 21 января 2020

У меня есть окно с 8 полями со списком (которые могут меняться в зависимости от пользовательского ввода), и я пытаюсь прикрепить функцию привязки к каждому полю со списком. Поскольку количество полей со списком является переменным, я создал список виджетов со списком. Вот фрагмент моего кода:

from tkinter import *
from tkinter import ttk
from tkinter import messagebox


root=Tk()

root.geometry('300x300')
brandDropdownList=[]
listOfBrands=['Test 1', 'Test 2', 'Test 3']

for i in range(8):
    brandDropdownList.append(ttk.Combobox(root, state='readonly', values=listOfBrands, width=10))
    brandDropdownList[-1].grid(row=i,column=0)

    def testPop(event):
        messagebox.showinfo("message",brandDropdownList[-1].get())

    brandDropdownList[-1].bind("<<ComboboxSelected>>",testPop)

root.mainloop()

Как сделать так, чтобы при выборе первого поля со списком всплыло соответствующее значение? Я знаю, что это как-то связано с указателем, но, похоже, я не могу понять, что именно.

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Вы можете просто использовать event.widget в testPop():

def testPop(event):
    messagebox.showinfo("message", event.widget.get())

Лучше переместить функцию testPop() из для l oop.

1 голос
/ 21 января 2020

Ваша функция testPop принимает виджет в качестве аргумента и вызывает закрытие с помощью lambda:

for i in range(8):
    brandDropdownList.append(ttk.Combobox(root, state='readonly', values=listOfBrands, width=10))
    brandDropdownList[-1].grid(row=i,column=0)
    def testPop(event, widget):
        messagebox.showinfo("message",widget.get())
    brandDropdownList[-1].bind("<<ComboboxSelected>>",
                               lambda e, c=brandDropdownList[-1]: testPop(e, c))

О том, почему вам нужно принудительно закрывать, вы можете прочитать ответ здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...