AttributeError: object has no attribute 'tk'
AttributeError: object has no attribute 'tk'
我已经搜索了很多,但我找不到解决这个问题的方法。我正在尝试使用 tkinter 创建注册表单,稍后我将连接到数据库。这是代码:
from Tkinter import *
class MWindow(object):
def __init__(self,master):
self.frame=Frame(master)
self.frame.pack()
self.title= Label(self,text = "Login")
self.title.grid(row=0,column=1)
self.userid_label = Label(self,text ="Username: ")
self.userid_label.grid(row=1,column=0)
self.userid_entry= Entry(self)
self.userid_entry.grid(row=1,column=1)
self.password_label = Label(self,text ="Password: ")
self.password_label.grid(row=2,column=0)
self.password_entry= Entry(self)
self.password_entry.grid(row=2,column=1)
self.signin = Button (self,text = "Login",command=logging_in)
self.signin.grid(row=5,column=1)
self.signup = Button (self,text = "Sign Up",command=signing_up)
self.signin.grid(row=5,column=2)
def logging_in(self):
pass
def signing_up(self):
pass
root= Tk()
root.attributes('-fullscreen',True)
root.resizable(width=False, height=False)
root.title("My Registration Form")
app=MWindow(root)
root.mainloop()
这是我得到的错误:
Traceback (most recent call last):
File "form.py", line 41, in
app=MWindow(root)
File "form.py", line 11, in init
self.title= Label(self,text = "Login")
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 2591, in init
Widget.init(self, master, 'label', cnf, kw)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 2081, in init
BaseWidget._setup(self, master, cnf)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 2059, in _setup
self.tk = master.tk
AttributeError: 'MWindow' object has no attribute 'tk'
我试着查看库文件以了解问题所在,但作为一个初学者,我不太了解。对问题所在和原因的一些解释会很有帮助。
您正在将 self
作为主/parent 传递给您的小部件。
例如 - Entry(self, ...)
但是,您的 class MWindow
不是从 Tkinter 小部件继承的。
也许您打算使用 self.frame
?
如果你真的想使用self
你可以这样做:
import Tkinter as tk
...
class MWindow(tk.Frame):
def __init__(self, master, *args, **kwargs):
tk.Frame.__init__(self, master, *args, **kwargs)
abutton = tk.Button(self, ....)
如果这令人困惑,那么这里有一个很好的 answer。
既然你提到了 source code.....
看看Tk()
class。其中包含以下行:
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
现在,查看所有 Widget
继承自的 BaseWidget
class。这包含以下行:
self.tk = master.tk
你有你的基础根 window Tk()
具有属性 tk
并且此集合的每个 child 的属性 tk
是master
的 tk 属性。对于嵌套的小部件依此类推,因为小部件的 parent 可能只是另一个小部件,所以它当然不必是根 window。
我已经搜索了很多,但我找不到解决这个问题的方法。我正在尝试使用 tkinter 创建注册表单,稍后我将连接到数据库。这是代码:
from Tkinter import *
class MWindow(object):
def __init__(self,master):
self.frame=Frame(master)
self.frame.pack()
self.title= Label(self,text = "Login")
self.title.grid(row=0,column=1)
self.userid_label = Label(self,text ="Username: ")
self.userid_label.grid(row=1,column=0)
self.userid_entry= Entry(self)
self.userid_entry.grid(row=1,column=1)
self.password_label = Label(self,text ="Password: ")
self.password_label.grid(row=2,column=0)
self.password_entry= Entry(self)
self.password_entry.grid(row=2,column=1)
self.signin = Button (self,text = "Login",command=logging_in)
self.signin.grid(row=5,column=1)
self.signup = Button (self,text = "Sign Up",command=signing_up)
self.signin.grid(row=5,column=2)
def logging_in(self):
pass
def signing_up(self):
pass
root= Tk()
root.attributes('-fullscreen',True)
root.resizable(width=False, height=False)
root.title("My Registration Form")
app=MWindow(root)
root.mainloop()
这是我得到的错误:
Traceback (most recent call last):
File "form.py", line 41, in
app=MWindow(root)
File "form.py", line 11, in init
self.title= Label(self,text = "Login")
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 2591, in init
Widget.init(self, master, 'label', cnf, kw)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 2081, in init
BaseWidget._setup(self, master, cnf)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py", line 2059, in _setup
self.tk = master.tk
AttributeError: 'MWindow' object has no attribute 'tk'
我试着查看库文件以了解问题所在,但作为一个初学者,我不太了解。对问题所在和原因的一些解释会很有帮助。
您正在将 self
作为主/parent 传递给您的小部件。
例如 - Entry(self, ...)
但是,您的 class MWindow
不是从 Tkinter 小部件继承的。
也许您打算使用 self.frame
?
如果你真的想使用self
你可以这样做:
import Tkinter as tk
...
class MWindow(tk.Frame):
def __init__(self, master, *args, **kwargs):
tk.Frame.__init__(self, master, *args, **kwargs)
abutton = tk.Button(self, ....)
如果这令人困惑,那么这里有一个很好的 answer。
既然你提到了 source code.....
看看Tk()
class。其中包含以下行:
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
现在,查看所有 Widget
继承自的 BaseWidget
class。这包含以下行:
self.tk = master.tk
你有你的基础根 window Tk()
具有属性 tk
并且此集合的每个 child 的属性 tk
是master
的 tk 属性。对于嵌套的小部件依此类推,因为小部件的 parent 可能只是另一个小部件,所以它当然不必是根 window。