Python Tkinter treeview.heading命令在for循环中不起作用

问题描述 投票:0回答:1

我正在尝试为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()

但是当我尝试制作相同的精确代码,但使用for循环设置列名称和命令时,每列的命令均设置为循环中的最后一个命令:

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()

为什么会这样?我知道在this post中已经回答了类似的问题,但是如果可能,我想尝试使用预期的选项。

python-3.x tkinter treeview
1个回答
0
投票

如果我改变

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))

似乎可以解决问题

© www.soinside.com 2019 - 2024. All rights reserved.