我正在创建一个全局数据字典,从中我将在字典中显示各种数据。字典的两个元素是列表和布尔变量。我想在CheckButton小部件中使用BooleanVar()。
字典用于存储我想在我的gui中显示的各种机器子系统的信息。 gui的一项功能是,如果用户愿意,则可以排除频道,这意味着停止监视。 机器通道是字典键,带有列表和布尔变量。该列表包含一些用于确定通道状态的初始数据。我想添加到复选框中的BooleanVar(),以便用户可以在排除/包括通道gui之间切换。
channelListFull = {'sys1:channel1': (['Label1', 'GOOD', 0, 0],BooleanVar()),
'sys1:channel2': (['Label2', 'GOOD', 0, 0],BooleanVar()),
'sys2:channel1': (['Label3', 'GOOD', 0, 0],BooleanVar())
etc...
其余代码(大致来说,不是完全可执行的)如下
class ChannelDisplay(Frame)
def __init__(self, master=None, label='NONE', channel='NONE',**kw):
Frame.__init(self, master, **kw)
self.lbl = label
self.chnl = channel
self.component = tk.Label(self, text=self.lbl)
self.component.grid
self.toggle = tk.Checkbutton(self,variable=channelListFull[channel][1])
self.toggle.grid
class Application(Frame):
def __init__(self,master=None):
Frame.__init__(self,master)
self.monitoring()
def monitor(self):
channelRemoveList = []
for entry in channelListFull.keys():
badChannel = channelListFull[entry][1].get()
if not badChannel :
channelRemoveList.append(entry) #This is a separate function
that modifies which channels
are included in the monitoring
process
for entry in channelListFull.keys():
self.chan = ChannelDisplay(root,label=channelListFull[0][0],channel=entry)
self.chan.grid()
root = Tk()
app=application(master=root)
app.mainloop()
我在创建channelListFull
的那一行看到错误消息:
Exception AttributeError: "BooleanVar instance has no attribute '_tk'" in
<bound method BooleanVar.__del__ of <Tkinter.BooleanVar instance at 0x7f39981b77e8>>
ignored
答案 0 :(得分:1)
我可以在启动Tk小部件和窗口之前启动Tk变量吗?
不,您不能。您必须先创建一个根窗口。