当迭代for循环时,我如何使tkinter变量集为随机int变化



我正在学习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))

相关内容

  • 没有找到相关文章

最新更新