我正在学习python,并试图制作一个骰子滚动应用程序。它基本上是功能性的,但这一点点代码运行不正常。
该程序的目标是让用户输入要掷骰子的数量和骰子上的面数,并在范围内为每个骰子输出随机数
def die_count(*args):
x = 0
count = int(total.get())
faces = int(sides.get())
for i in range(count):
die_value.set(random.randint(1, faces))
ttk.Label(frame, textvariable = die_value).grid(row = 3, column = x)
x = x + 1
我只是在学习tkinter,所以可能有一些我还没有学会的.set((的神秘行为。。。我希望这段代码能迭代循环count次,每次都重新分配die_value。它正确地循环,但die_value在每个标签中保持不变。
输入total=3和faces=6的示例输出为5 5 5,并且在重新运行时为3 3 3,或者该范围内的任何其他数字重复"total"次数。
输出的范围是正确的,因为它永远不会超过边输入值的界限。然而,个人的价值观应该是不同的,我不确定是什么导致了它们不一样
下面是整个代码(我知道它一团糟,但我想让它工作起来,然后让它变得漂亮(
import random
from tkinter import *
from tkinter import ttk
window = Tk()
window.title("die roll")
window.geometry("500x500")
def die_count(*args):
x = 0
count = int(total.get())
faces = int(sides.get())
for i in range(count):
die_value.set(random.randint(1, faces))
ttk.Label(frame, textvariable = die_value).grid(row = 3, column = x)
x = x + 1
die_value = IntVar()
total = IntVar()
sides = IntVar()
ttk.Label(window, text='how many dice would n you like to roll?',borderwidth=1).grid(row=0,column=0)
ttk.Entry(window,textvariable=total).grid(row=0,column=1)
ttk.Label(window, text='how many sides n should the dice have?',borderwidth=1).grid(row=1,column=0)
ttk.Entry(window, textvariable=sides).grid(row=1,column=1)
ttk.Button(window, text="Roll", command = die_count).grid(row = 2,column=0)
frame = ttk.Frame(window).grid(row=2, column=1)
window.mainloop()
以下是代码:
def die_count(*args):
x = 0
count = int(total.get())
faces = int(sides.get())
for i in range(count):
ttk.Label(frame, text = random.randint(1, faces)).grid(row = 3, column = x)
x += 1
我已经将textvariable更改为text,因为它会"绑定"textvariable
,所以每次更改textvariable
时,它都会更改值(这就是为什么它们最终都是上一次滚动的值(。对于text
,这种情况不会发生。
您似乎只有一个die_value
实例。我想你们的标签每个都需要一个:
for i in range(count):
die_value = IntVar()
die_value.set(random.randint(1, faces))