我正在尝试使用Tkinter创建一个gui,该gui可以获取用户名和密码并连接到远程服务器并执行功能。我拍了一些凌乱的代码,它或多或少地起作用了,但是当我试图在一个整洁的模块中重新创建它时,它就坏了。它可能是新手python错误,但我找不到它。编辑:澄清,当它工作时,唯一的类是setupGui和该类下的任何方法。现在,我已将gui与方法分开,它不起作用。

class setupGui(object):
   def __init__(self, parent):
      ##omited general frame stuff

       self.userIn = ttk.Entry(self.topFrame, width = 20)
       self.userIn.grid(row = 1, column = 1)
       self.passIn = ttk.Entry(self.topFrame, width = 20, show ="*")
       self.passIn.grid(row = 2, column = 1)

       #Buttons
       self.setupbtn = ttk.Button(self.topFrame, text = "Start Setup", command = setup().startSetup())
       self.setupbtn.grid(row = 3, column = 0, pady = 10)

class setup(object):
   def__init__(self):
      self.userName = setupGui.userIn.get()
      self.userPass = setupGui.passIn.get()
   def startSetup(self):
      self.another_related_fucntion # about 4 related functions actually

if __name__ == '__main__':
root = Tk()
gui = setupGui(root)
root.mainloop()

而且,如果我没有将命令附加到按钮上,则一切正常(但是看起来很漂亮,但确实蹲了一下)。当我附加命令时,出现此错误:
Traceback (most recent call last):
 File "macSetup.py", line 211, in <module>
 gui = setupGui(root)
 File "macSetup.py", line 45, in __init__
self.setupbtn = ttk.Button(self.topFrame, text = "Start Setup", command = setup().startSetup())
File "macSetup.py", line 69, in __init__
self.userName = setupGui.userIn.get()
AttributeError: type object 'setupGui' has no attribute 'userIn'

最佳答案

在您的代码中,userIn被设置为setupGui对象的实例变量,而不是setupGui类本身的属性。

最简单的解决方案是合并setupGuisetup类,以将startSetup作为setupGui的方法移入,然后在初始化command=self.startSetup时使用setupbtn -这将startSetup称为绑定(bind)方法,因此self应该引用setupGui对象然后可以使用例如开启self.userIn.get()self.passIn.get()

如果您希望将setup类中的逻辑与setupGui类分开,则可以像这样将其分开:

class setup(object):
    def __init__(self, username, userpass):
        self.userName = username
        self.userPass = userpass

    def startSetup(self):
        # as before

然后将此方法添加到setupGui类:
def dosetup(self):
    setup(self.userIn.get(), self.passIn.get()).startSetup()

并使用Button实例化command=self.dosetup。 (我个人会将setup类设为一个独立的函数,但我不知道startSetup例程实际上有多复杂,因此我认为您有充分的理由将其设为一个类。)

关于python - 具有多个类和Tkinter的Python属性错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10658376/

10-09 19:11