具有许多自定义选项的消息框替代方案

2024-04-20 13:36:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在做大学作业。我用App类创建了一个主窗口,在这里可以玩游戏。在初始化此应用程序类之前,我想打开另一个带有自定义按钮的窗口,如“基本”、“高级”等。但是,目前我只能创建一个带有YES/NO或YES/NO/CANCEL等的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()

Tags: norunapp应用程序basicinit作业root
1条回答
网友
1楼 · 发布于 2024-04-20 13:36:32

messagebox用于向用户显示消息、警告等,或提供yes/no/cancel/abort之间的选择。你要找的是^{}。在

每个单选按钮都有一个值,并与获取该值的变量相关联。当您将多个绑定到同一变量的按钮组合在一起时,您将得到许多选择中的一个。在

下面是一个简单的例子,为了方便起见,这些值是整数(从0开始)。这是你可以改变,如果你坚持字符串。你所需要的只是一个带有单选按钮的框架和一个启动游戏按钮,它读取你的选择并将其传递给你的主应用程序。在

正如布莱恩·奥克利评论的那样,虽然你可以打开一个辅助窗口,但你不需要。您可以使用根窗口显示选项,一旦用户做出选择,您就可以用程序的主要部分替换单选按钮。如果需要,可以显示弹出窗口,但这不是唯一的解决方案。在

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()

如果你真的想要一个弹出窗口

^{pr2}$

相关问题 更多 >