我正在尝试在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()
答案 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)
你在这里犯了两个错误:
self.rd
(None
)作为按钮的命令,而不是方法本身;和result
,不类属性self.result
。正确的代码包括:
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))