如何在弹出窗口中刷新答案

时间:2018-07-16 16:17:32

标签: python tkinter

所以我只是想用gui做一个骰子滚轴。我创建了一个弹出窗口,其中显示1到6 random.randint(1,6)之间的随机数。我将其分配给了一个名为数字number = random.randint(1,6)的变量,但它始终给出相同的数字。我只需要它不要在单击按钮时吐出总是相同的数字

def popup_showinfo(): 
      showinfo("You rolled", number)
number = random.randint(1,6) 
class Application(ttk.Frame):`

    def __init__(self, master):
        tk.Frame.__init__(self, master)
        self.pack()

        self.button_showinfo = ttk.Button(self, text="Roll", command=popup_showinfo)
        self.button_showinfo.pack()

    root = tk.Tk()
    app = Application(root)
    root.mainloop()

1 个答案:

答案 0 :(得分:1)

好的,您的问题还不完整,但是我想我明白了您的需要。

我下面的回答将在这里实现2个目的。一种是向您展示Minimal, Complete, and Verifiable example代码的样子。第二个是产生您想要的影响。

与其在类外具有功能,不如在类内使用方法(类功能)更好地管理事物。因此,让我们将该弹出功能移至类中。接下来,我们可以使用您的随机整数更新标签。请记住,现在设置代码的方式将在程序启动时仅产生一次随机数。相反,您希望在方法中包含随机的int代码,以便每次运行该方法时都会创建一个新的数字。

通过直接在类中添加标签并通过新方法调用标签的更新,我们可以在1到6之间滚动一个数字。

import tkinter as tk
import tkinter.ttk as ttk
import random


class Application(ttk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.showinfo_label = ttk.Label(self)
        self.showinfo_label.pack()

        self.button_showinfo = ttk.Button(self, text="Roll", command=self.showinfo).pack()

    def showinfo(self): 
        number = random.randint(1,6)
        self.showinfo_label.config(text="You rolled {}".format(number))


root = tk.Tk()
app = Application(root).pack()
root.mainloop()

请记住,当我们谈论MCVE时,上面的代码就是我们想要的。产生影响或至少再现错误所需的最低限度。

这包括所有必需的导入,root和mainloop()代码以及执行特定操作所需的少量代码。

更新:

您似乎确实在尝试使用Tkinter的消息框方法中的showinfo方法,因此这也是使用该方法的示例。

import random
import tkinter as tk
import tkinter.ttk as ttk
from tkinter.messagebox import showinfo


class Application(ttk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        self.button_showinfo = ttk.Button(self, text="Roll", command=self.showinfo).pack()

    def showinfo(self): 
        number = random.randint(1,6)
        showinfo("You rolled ", "{}".format(number))


root = tk.Tk()
app = Application(root).pack()
root.mainloop()