Python 3类错误

时间:2017-01-09 15:44:05

标签: python python-3.x tkinter

我试图通过使用类来制作一个小程序。到目前为止,我已经创建了两个类,其中第一个将运行下一个类。当我运行它时,我收到一条错误消息。我不明白什么是错的,但看起来它有一些关于我在确定名称Menu1之前已经阅读过的事情。我将在这些课程之后创建一个新功能,首先运行MainWindow,然后Menu1。我很感激帮助。

代码:

class MainWindow:
    app = Tk()
    app.title("MyApp")
    window = Frame(app, width=1050, height=550)
    app.minsize(width=1050, height=550)
    window.pack()
    menu = Menu1()
    menu.makeMenu()
    app.mainloop()


class Menu1:
    def makeMenu(self):
        app.config(menu=menu)
        menu.add_cascade(label="Settings", menu=subMenu)
        subMenu.add_command(label="Settings", command=settings1)

def settings1():
    print("Open new window")


if __name__ == "__main__":
    MainWindow()

错误讯息:

Traceback (most recent call last):
  File "", line 7, in <module>
    class MainWindow:
  File "", line 13, in MainWindow
    menu = Menu1()
NameError: name 'Menu1' is not defined

Process finished with exit code 1

1 个答案:

答案 0 :(得分:5)

class MainWindow下的所有内容都会立即运行。它不是一种方法。此时class Menu1尚未执行,并且尚未存在该名称的类。

看起来您真的只希望MainWindow成为功能

def main_window():
    app = Tk()
    app.title("MyApp")
    window = Frame(app, width=1050, height=550)
    app.minsize(width=1050, height=550)
    window.pack()
    menu = Menu1()
    menu.makeMenu()
    app.mainloop()

(这次我使用了一个小写字母,因为Python style guide保留了类的驼峰名称。)

您的下一个问题是Menu1.makeMenu()无权访问app中的main_window()本地变量;你需要传递它:

menu = Menu1()
menu.makeMenu(app)

class Menu1:
    def makeMenu(self, app):
        app.config(menu=self)
        menu.add_cascade(label="Settings", menu=subMenu)
        subMenu.add_command(label="Settings", command=setting1)

请注意,我将menu更改为selfmenumain_window中的另一个本地名称。

代码仍然无效,因为您没有在任何地方定义名称subMenu,但这至少是一步或者更近一步。