我想创建一个使用Tkinter的抓取用户名和密码并连接到远程服务器并执行功能的gui。我把一些乱七八糟的代码放在一起,它或多或少的工作,但是当我试图在一个整洁的模块中重新创建它时,它破裂了。它可能是一个新手Python错误,但我无法发现它。编辑:澄清,当它的工作,唯一的类是setupGui和任何方法在该类。现在我已经将gui与方法分开了,它不起作用。Python属性错误与多个类和Tkinter
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()
如果我没有连接到该按钮的命令做,一切工作正常(但显然不diddly蹲除了外观漂亮)。当我连接的命令,我得到这个错误:
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'
多数民众赞成我是如何建立起来的。我通常不喜欢与guis混合使用功能。在Java中,我甚至将它们全部放在单独的包中。我尝试更改self.userName = setupGui.userIn.get()self.userName = setupGui(root).userIn.get(),但我得到了一个疯狂的递归错误。我也尝试了gui而不是根(因为它在__main__中定义),但它说它是未定义的。 哪种方法更具pythonic? – Hiroshi
请参阅编辑。我认为这会对你有用。 (其实,看到最近的编辑,因为我第一次搞砸了'dosetup'。) – zigg