我正在将函数类型应用程序转换为 oop 版本,但遇到了麻烦。这是我的问题代码:
from tkinter import *
from tkinter.font import Font
class createBlank():
def __init__(self, master):
self = Frame(master, bg='white')
self.pack(fill='both', expand=True)
helv18 = Font(family='Helvetica', size=18, weight='bold')
self.Next_Button = Button(self, text="Next", font=helv18, command=self.doNext)
self.Next_Button.pack(side = BOTTOM, pady=3)
def doNext(self):
print("Next!")
当我运行它时,我得到: AttributeError: 'Frame' object has no attribute 'doNext' 如果我在构建 Next_Button 时消除该命令,则不会收到错误消息,并且该部分将按预期运行,但按钮功能除外。
我在类参数中尝试了使用和不使用 tk.Frame,使用和不使用 super()init, 无论有或没有leading.self,都不起作用。我想要的只是按钮的功能,即使它只是打印“下一步”
正如评论中所指出的,你为什么这样做
self = Frame(master, bg='white)
?这正是导致您的代码无法识别 doNext()
操作的原因......下面是一个有效的示例:
from tkinter import *
from tkinter.font import Font
class createBlank(Frame):
def __init__(self, master):
self.parent = master
super().__init__(self.parent, bg='white')
self.pack(fill='both', expand=True)
helv18 = Font(family='Helvetica', size=18, weight='bold')
self.Next_Button = Button(self, text="Next", font=helv18, command=self.doNext)
self.Next_Button.pack(side = BOTTOM, pady=3)
def doNext(self):
print("Next!")
root = Tk()
window = createBlank(root)
window.pack(side='top', fill='both', expand=True)
root.mainloop()
其实我们的代码没有太大区别,唯一的区别是我继承了
tk.Frame()
类,然后用super().__init__()
来初始化它。
如果您有充分的理由(但我不会推荐)做类似
self = XXX
的事情,那么请看看这个问题