繁体   English   中英

如何在遍历 for 循环时将 tkinter 变量设置为随机 int 变化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM