尝试从随机变量中在tkinter中更新标签

时间:2014-09-02 13:34:29

标签: python tkinter

我正在尝试在Python中制作虚拟骰子并使用tkinter作为GUI,基本上生成1-6的随机数,但我无法使用'roll'的结果更新标签。有人可以帮我吗?这是我到目前为止的代码:

from tkinter import*
import random

class Application(Frame):
    result = 0

    def __init__(self, master):
        Frame.__init__(self,master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        self.label1 = Label(self)
        self.label1["text"] = "You rolled a " + str(self.result)
        self.label1.grid()

        self.button1 = Button(self, text = "Roll again?")
        self.button1["command"] = self.rd()
        self.button1.grid()

    def rd(self):
        result = random.randint(1, 6)
        self.label1.config(text= "You rolled a " + str(self.result))




root = Tk()
root.title("Dice")
root.geometry("100x50")

app = Application(root)

root.mainloop()

2 个答案:

答案 0 :(得分:1)

    self.button1["command"] = self.rd()

在此行中,您将self.rd结果分配给该命令。 rd返回None,所以你实际上是说该按钮根本没有命令。尝试:

    self.button1["command"] = self.rd

此外,在这些方面:

    result = random.randint(1, 6)
    self.label1.config(text= "You rolled a " + str(self.result))

您创建变量result,但随后使用self.result配置标签,该标签完全独立于result,因此它始终显示0.尝试:

    result = random.randint(1, 6)
    self.label1.config(text= "You rolled a " + str(result))

或者,如果您想跟踪最后得出的结果用于其他目的,

    self.result = random.randint(1, 6)
    self.label1.config(text= "You rolled a " + str(self.result))

答案 1 :(得分:1)

你在这里犯了两个错误:

  1. 您将通话结果分配给self.rdNone)作为按钮的命令,而不是方法本身;和
  2. 您将随机骰子卷指定为本地名称result类属性self.result
  3. 正确的代码包括:

    self.button1["command"] = self.rd 
                                   # ^ note parentheses '()' removed
    

    def rd(self):
        self.result = random.randint(1, 6)
      # ^ note 'self.' added
        self.label1.config(text= "You rolled a " + str(self.result))