【问题标题】:Python: Getting variable from a function that generates random numbers by pressing a buttonPython:通过按下按钮从生成随机数的函数中获取变量
【发布时间】:2022-01-07 06:42:22
【问题描述】:

我正在开发一款你必须掷骰子的游戏。当我按下按钮时,会出现一个从 1 到 6 的随机值并打印在窗口中 - 这很好。问题是我需要以某种方式获得与“骰子”显示的值相同的值。这是我的代码:

from tkinter import *
import random
 
window=Tk()
window.geometry("400x400")
 
l1=Label(window)
 
def roll():
    dice=random.randint(1,6)
    l1.config(text=f'{dice}')
    l1.pack()
     
b1=Button(window,text="Roll the Dice!",foreground='blue',command=roll)
b1.pack()
 
window.mainloop()

这里我想获取值 dice 并在其他地方使用这个值,但是函数 roll 绑定到按钮 b1的命令>。我试图创建另一个函数甚至一个类,但后来我遇到了其他问题,例如即使我反复按下按钮后骰子上的数字也不会改变等。现在我已经没有想法了。您能否编辑我的代码,使程序像以前一样工作,但它还返回 dice 显示的值,以便我可以在其他地方使用相同的值?

【问题讨论】:

    标签: python function tkinter button random


    【解决方案1】:

    您可以使用全局变量:

    from tkinter import *
    import random
    
    window=Tk()
    window.geometry("400x400")
    
    l1=Label(window)
    l2=Label(window)
    
    def roll():
        global dice
        dice=random.randint(1,6)
        l1.config(text=f'{dice}')
        l1.pack()
    
    def last():
        l2.config(text=f'Last roll was {dice}')
        l2.pack()
    
    b1=Button(window,text="Roll the Dice!",foreground='blue',command=roll)
    b1.pack()
    
    b2=Button(window,text="Get last roll",foreground='blue',command=last)
    b2.pack()
    
    window.mainloop()
    

    注意:这需要您先按下“滚动”按钮。如果您先按下“最后一个”按钮,则会收到 NameError 异常(可以通过在全局范围内使用初始值定义 dice 来防止)。

    【讨论】:

    • 谢谢,但是我希望将骰子上的最后一掷存储为变量,因为我需要将游戏中的数字移动到另一个字段,这取决于骰子的数量生成。这就是为什么我需要以某种方式单独获得骰子的值而不是在窗口中打印出数字。尽管如此,还是感谢您的建议!
    • 嗯,dice 设置一次后,您可以在模块中的任何位置访问它,而不仅仅是用于打印。它存储为 global 变量 dice。第二个按钮的打印只是为了表明dice也可以在函数last中使用。
    • 我想我已经设法找出问题所在 - 我想在定义之前使用dice。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2015-04-05
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多