gpt4 book ai didi

具有多个类和 Tkinter 的 Python 属性错误

转载 作者:行者123 更新时间:2023-12-03 08:24:00 24 4
gpt4 key购买 nike

我正在尝试使用 Tkinter 创建一个 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类(class)搬家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类(class):
def dosetup(self):
setup(self.userIn.get(), self.passIn.get()).startSetup()

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com