![](/img/trans.png)
[英]How to change the name of each entry box in tkinter when iterating in a for loop?
[英]how can I make a tkinter variable set as random int change when iterating through for loop
我正在学习 python 并尝试制作一个滚动应用程序。 它主要是功能性的,但这一点代码运行不正常。
该程序的目标是在范围(面数)范围内接受用户输入的骰子数和骰子上的面数,以及每个骰子的 output 随机数
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()神秘行为......我希望这段代码能够遍历循环计数时间,每次都重新分配die_value 。 它循环正确,但每个 label 中的 die_value 保持不变。
一个示例 output 对于输入总 = 3 和面 = 6,将是 5 5 5,并且在重新运行时,3 3 3 或范围内重复“总”次数的任何其他数字。
输出的范围是正确的,因为它永远不会超过边输入值的范围。 但是,个人价值观应该彼此不同,我不确定是什么导致它们不一样。
下面是整个代码(我知道这是一团糟,但我想让它工作,然后让它变得漂亮)
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()
您似乎只有一个die_value
实例。 我假设您的标签每个都需要一个:
for i in range(count):
die_value = IntVar()
die_value.set(random.randint(1, faces))
这是代码:
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
,这不会发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.