我在Python中有一个使用Tk的小型GUI应用程序。它有几个过滤器——一个文本条目(它们设置过滤器值)和复选框(设置过滤器开/关)。我将过滤器创建为从ttk
的Labelframe
中继承的类:
from tkinter.ttk import Labelframe
import tkinter as tk
class FilterWidget(Labelframe):
def __init__(self, parent, label):
Labelframe.__init__(self, parent, text=label)
self.grid()
self._entry = tk.Entry(self)
self._entry.grid(row=0, column=0)
self._checkbox = tk.Checkbutton(self, command=lambda: print(self))
self._checkbox.grid(row=0, column=1)
然后我创建了这个类的几个实例,并将它们放在GUI中:
root = tk.Tk()
source_filter = FilterWidget(root, "Source")
source_filter.grid(row=0, column=0)
level_filter = FilterWidget(root, "Severity")
level_filter.grid(row=0, column=1)
root.mainloop()
创建并正确显示小部件。但是,当其中一个复选框被单击并更改状态时,另一个复选框也会更改状态!你知道吗
单击不同的复选框时,print
命令输出.!filterwidget
和.!filterwidget2
,因此它们是独立的对象。似乎它们是某种隐含的同步,但我不知道这是怎么发生的。你知道吗
所以,问题是:如何消除这种依赖性,使复选框相互独立?你知道吗
正如the docs提到的
下面是更新后的代码,使用IntVar存储Checkbutton状态。你知道吗
相关问题 更多 >
编程相关推荐