我试图通过使用类来制作一个小程序。到目前为止,我已经创建了两个类,其中第一个将运行下一个类。当我运行它时,我收到一条错误消息。我不明白什么是错的,但看起来它有一些关于我在确定名称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
答案 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
更改为self
,menu
是main_window
中的另一个本地名称。
代码仍然无效,因为您没有在任何地方定义名称subMenu
,但这至少是一步或者更近一步。