如何在Tk()在其他类中定义的类中创建StringVar?

2024-06-16 10:35:12 发布

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

这里我需要装箱一个DropDown类,然后将其添加到root或{}GUI中。但是Tkinter.StringVar()抛出一个错误

`Traceback (most recent call last):
  File "D:/Testing/Tiks/main2.py", line 64, in <module>
    d = Droppy(application)
  File "D:/Testing/Tiks/main2.py", line 45, in __init__
    self.control_variable = Tkinter.StringVar()
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 251, in __init__
    Variable.__init__(self, master, value, name)
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 182, in __init__
    self._tk = master.tk
AttributeError: 'NoneType' object has no attribute 'tk'
Exception AttributeError: "StringVar instance has no attribute '_tk'" in <bound method StringVar.__del__ of <Tkinter.StringVar instance at 0x0236F7B0>> ignored`

我的代码是这样的

^{pr2}$

现在我知道在Tkinter.StringVar()之前Tkinter.Tk()可以解决这个问题,但是我不能把Tkinter.Tk()和特金特·斯特林瓦尔在同一个班里。我怎样才能避免这个问题?谁能帮忙吗


Tags: inpyselfmasterinittkinterlibline
2条回答

mainloop是无休止的循环,它一直在运行,直到您关闭Tk窗口。
App已关闭时,您将创建Droppy。在

您必须在mainloop之前创建对象,例如在App.__init__内。在

import Tkinter


class App(object):

    def __init__(self):
        self.root = Tkinter.Tk()
        ############################
        d = Droppy(self)
        d.dropIt()
        ############################
        self.root.mainloop()


class Droppy(object):

    def __init__(self, frame=None):
        # if frame is None:
        #     raise Exception
        self.frame = frame
        self.control_variable = Tkinter.StringVar()
        self.control_variable.set("Choose Options")
        self.dropDown = None

    def dropIt(self):
        self.dropDown = Tkinter.OptionMenu(self.frame.root, self.control_variable, 
                                           "Rules", "Processing", "Output",
                                           "Actions")
        self.dropDown.pack()

if __name__ == '__main__':
    application = App()

另一种方法是在main中调用mainloop():

if __name__ == '__main__':
    application = App()
    d = Droppy(application)
    d.dropIt()
    application.root.mainloop()

相关问题 更多 >