我可以在启动Tk小部件和窗口之前启动Tk变量吗?

2024-09-29 21:23:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个全局数据字典,从中可以在字典中显示各种数据。字典的两个元素是列表和布尔变量。我想在CheckButton小部件中使用BooleanVar()

字典用于存储我希望在gui中显示的各种机器子系统的信息。gui的一个功能是,如果用户愿意,可以排除通道,这意味着停止监视。 机器通道是字典键,带有一个列表和一个布尔变量。该列表包含一些用于确定通道状态的初始数据。我想添加到checkbutton中的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

Tags: 数据inselfmaster列表字典initdef

热门问题