我试着用类来做一个小程序。到目前为止,我已经做了两个类,其中第一个将运行下一个。当我运行这个时,我会收到一条错误消息。我不明白是怎么回事,但在读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发布于 2017-01-09 15:47:41
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()无法访问main_window()中的app局部变量;您需要传入:
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,但这至少更近了一步或2步。
https://stackoverflow.com/questions/41551621
复制相似问题