我不是程序员,只是一个业余爱好者,所以如果你能告诉我解决我的问题的“pythonic 方式” ,我会很高兴。
我想要的是:
我想用 tkinter 创建一个菜单,它有一个“新游戏”、一个“设置”和一个“退出”按钮,如果我点击“退出”按钮,我想要一个“你确定吗?” 弹出窗口有一个“是”和一个“否”按钮,如果我点击“否”按钮,我想销毁“你确定吗?” 弹出窗口。
发生了什么:
“新游戏”和“设置”按钮完全按照我想要的方式工作,但是当我点击“退出”按钮时,我得到“你确定吗?” 弹出窗口,我收到此错误:
名称“varAreYouSureToplevel”未定义
如果这不是正确的方法,请告诉我它通常是如何制作的。
我正在学习如何编写课程,当我尝试在课程中使用 Tkinter 时,这让我有点困惑。
如果您对此有解决方案(使用 Tkinter root 和 Toplevel)而无需编写课程,那么我会很高兴看到它!
我正在使用Python 3.4
谢谢您的帮助!
这是我的代码:
from tkinter import *
import os
class classMainMenu(Frame):
def __init__(self, varRoot):
Frame.__init__(self, varRoot)
self.grid()
self.funcMainMenu()
def funcMainMenu(self):
self.varNewGameButton = Button(self, text="New Game", command=self.funcNewGame)
self.varNewGameButton.grid(row=0, column=0)
self.varSettingsButton = Button(self, text="Settings", command=self.funcSettingsMenu)
self.varSettingsButton.grid(row=1, column=0)
self.varExitButton = Button(self, text="Exit", command=self.funcExit)
self.varExitButton.grid(row=2, column=0)
def funcNewGame(self):
self.varNewGameButton.destroy()
self.varSettingsButton.destroy()
self.varExitButton.destroy()
print("New Game")
def funcSettingsMenu(self):
self.varNewGameButton.destroy()
self.varSettingsButton.destroy()
self.varExitButton.destroy()
print("Settings")
def funcExit(self):
self.varAreYouSureToplevel = Toplevel(self)
self.varAreYouSureToplevel.title("Are you sure?")
self.varAreYouSureTextLabel = Label(varAreYouSureToplevel, text="Are you sure you want to exit?") # HERE IT SAYS: NameError: name 'varAreYouSureToplevel' is not defined
self.varAreYouSureTextLabel.grid(row=3, column=0)
self.varAreYouSureYesButton = Button(varAreYouSureToplevel, text="Yes", command=self.funcExitToDesktop)
self.varAreYouSureYesButton.grid(row=4, column=0)
self.varAreYouSureNoButton = Button(varAreYouSureToplevel, text="No", command=self.funcDestroyToplevel)
self.varAreYouSureNoButton.grid(row=4, column=1)
def funcDestroyToplevel(self):
self.varAreYouSureToplevel.destroy
def funcExitToDesktop(self):
os._exit(1)
varRoot = Tk()
objectMainMenu = classMainMenu(varRoot)
objectMainMenu.mainloop()