python oop 无法识别命令,为什么?

问题描述 投票:0回答:1

我正在将函数类型应用程序转换为 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,都不起作用。我想要的只是按钮的功能,即使它只是打印“下一步”

python-3.x oop button
1个回答
0
投票

正如评论中所指出的,你为什么这样做

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
的事情,那么请看看这个问题

© www.soinside.com 2019 - 2024. All rights reserved.