Python Команда Tkinter treeview.heading не работает прямо в цикле for - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь назначить разные функции для каждого из заголовков в виджете дерева tkinter.

следующий код имеет ожидаемый результат, но жестко закодирован:

from tkinter import *
from tkinter.ttk import *

root = Tk()

treeview = Treeview(root, columns=['c1', 'c2'])
treeview.pack()


treeview.heading('c1', text='c1', command=lambda:print('c1'))
treeview.heading('c2', text='c2', command=lambda:print('c2'))


root.mainloop()

, но когда я пытаюсь сделать тот же самый точный код, но использую для l oop для установки имен столбцов и команд, команда каждого столбца устанавливается на последнюю команду в l oop:

from tkinter import *
from tkinter.ttk import *

root = Tk()

treeview = Treeview(root, columns=['c1', 'c2'])
treeview.pack()


for c in ['c1', 'c2']:
    treeview.heading(c, text=c, command=lambda:print(c))


root.mainloop()

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

1 Ответ

1 голос
/ 01 апреля 2020

Если я изменю

for c in ['c1', 'c2']:
    treeview.heading(c, text=c, command=lambda:print(c))

на

for c in ['c1', 'c2']:
    treeview.heading(c, text=c, command=lambda col=c:print(col))

Кажется, проблема решена

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