我正在尝试通过使用类来制作一个小程序.到目前为止,我已经创建了两个类,其中第一个将运行下一个类.当我运行它时,我收到一条错误消息.我不明白什么是错的,但看起来它有一些关于我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, inclass MainWindow: File "", line 13, in MainWindow menu = Menu1() NameError: name 'Menu1' is not defined Process finished with exit code 1
Martijn Piet.. 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样式指南保留了类的驼峰名称).
你的下一个问题是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
到self
那里,menu
在另一个地方的名字main_window
.
代码仍然不起作用,因为您没有在subMenu
任何地方定义名称,但这至少是一步或者更接近一步.
一切都在下面立即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样式指南保留了类的驼峰名称).
你的下一个问题是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
到self
那里,menu
在另一个地方的名字main_window
.
代码仍然不起作用,因为您没有在subMenu
任何地方定义名称,但这至少是一步或者更接近一步.