我目前正在从事大学任务。我创建了一个主窗口,其中包含游戏所在的App
类。在初始化此App类之前,我想打开另一个窗口,其中包含“BASIC”,“ADVANCED”等自定义按钮。但是,目前我只能使用YES / NO或YES / NO /创建messagebox
取消等
messagebox
是否有允许自定义按钮的变体?从这些按钮我想要返回一个变量gamemode
或类似的东西,其值为“BASIC”或“ADVANCED”等字符串返回App.__init__()
。
到目前为止,这是我的代码。
from tkinter import *
class App:
def __init__(self, master):
if gamemode = "BASIC"
'run basic gamemode...'
elif gamemode = "ADVANCED"
'run advanced gamemode...'
root = tk.Tk()
app = App(root)
root.mainloop()
答案 0 :(得分:1)
messagebox
用于向用户显示消息,警告等,或提供yes / no / cancel / abort之间的选择。你要找的是Radiobutton
。
每个Radiobutton都有一个值,并且与获取该值的变量相关联。当您将许多此类按钮组合到同一个变量时,您将获得一个多选项。
这是一个简单的例子,其中值是整数(从0开始)以方便使用。如果你坚持使用字符串,这是你可以改变的。您只需要一个带有您的radiobuttons的框架和一个启动游戏按钮,它可以读取您的选择并将其传递给您的主应用程序。
正如Bryan Oakley评论的那样,虽然你可以打开一个辅助窗口,但你不需要。您可以使用根窗口显示选项,一旦用户做出选择,您可以将radiobuttons替换为程序的主要部分。如果需要,您可以显示弹出窗口,但这不是唯一的解决方案。
import tkinter as tk
class StartGameMenuWindow:
def __init__(self, parent):
self.parent = parent
self.frame = tk.Frame(parent)
self.frame.pack()
self.menu_value = tk.IntVar()
self._create_items()
def _create_items(self):
modes = ('Basic', 'Advanced')
for value, mode in enumerate(modes):
tk.Radiobutton(self.frame,
text=mode,
variable=self.menu_value,
value=value).pack()
tk.Button(self.frame, text='Start game', command=self.launch).pack()
def launch(self):
value = self.menu_value.get()
self.frame.destroy()
# Launch your game window with `value` as input
root = tk.Tk()
m = StartGameMenuWindow(root)
tk.mainloop()
如果你真的想要一个弹出窗口,
# instead of
self.frame = tk.Frame(parent)
self.frame.pack()
# use this, but make sure to rename `self.frame` everywhere in the class
self.window = tk.Toplevel()