Как напечатать случайное число в кадре tkinter? - PullRequest
0 голосов
/ 05 августа 2020

Я создаю программу, используя виджеты, которая позволяет нажимать кнопку «прокрутить» и показывает соответствующий номер. Прямо сейчас у меня возникли проблемы с печатью числа на этикетке (вместо терминала, который я умею делать).

Вот некоторые из моих кодов:

def test():

    # Button that when clicked, will print out random number on screen
    import tkinter as tk
    from random import randrange

    constant = tk.Tk()

    def main():

        screen()
        frame = frame_dice()
        dice_button(frame)
        tk.mainloop()

    def screen():

        canvas = tk.Canvas(constant, width = 1800, height = 1250)
        canvas.pack()
        return canvas

    def random_num():

        num = randrange(1, 7)
        return num

    def clicked():

        num = random_num()
        return num

    def frame_dice():

        frame = tk.Frame(constant, bg = "yellow")
        frame.place(relheight = .2, relwidth = .2, relx = .4, rely = .5)
        return frame

    def dice_button(frame):

        button = tk.Button(frame, text = "Roll", bg = "red", command = clicked)
        button.place(relx = .1, rely = .1, relheight = .6, relwidth = .7)

    main()

test()

Если вам нужны дополнительные разъяснения по вопросу, прокомментируйте ниже, и я буду рад ответить.

1 Ответ

2 голосов
/ 05 августа 2020

Вы в основном должны, в рамках метода clicked, изменить свойства любого объекта, на котором вы хотите отображать бросок кубика.

Я не уверен, что label вы ссылались на ваш вопрос, поскольку в вашем коде нет объектов меток, но в приведенной ниже программе показано, как изменить саму кнопку, чтобы отобразить последний ролик:

import tkinter as tk
from random import randrange
constant = tk.Tk()

def main():
    screen()
    frame = frame_dice()
    dice_button(frame)
    tk.mainloop()

def screen():
    canvas = tk.Canvas(constant, width = 300, height = 150)
    canvas.pack()
    return canvas

def clicked():
    num = randrange(1, 7)
    button["text"] = f"Roll (last roll was {num})"

def frame_dice():
    frame = tk.Frame(constant, bg = "yellow")
    frame.place(relheight = .8, relwidth = .8, relx = .1, rely = .1)
    return frame

def dice_button(frame):
    global button
    button = tk.Button(frame, text = "Roll", bg = "red", command = clicked)
    button.place(relx = .1, rely = .1, relheight = .8, relwidth = .8)

main()

Я сделал button global, чтобы его можно было правильно изменить несколькими методами (a) , но важный бит заключается в следующем:

def clicked():
    num = randrange(1, 7)
    button["text"] = f"Roll (last roll was {num})"

Это последняя строка, которая изменяет свойство текста кнопки, чтобы показать, как это может сделать:

введите описание изображения здесь

(a) Обычно, если вы повторно связываете переменную в любом месте метода, она локальна для этого метода - использование global отменяет это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...