#python #function #tkinter #button #random
#питон #функция #tkinter #кнопка #Случайный
Вопрос:
Я работаю над игрой, в которой ты должен бросить кости. Когда я нажимаю кнопку, появляется случайное значение от 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. Я попытался создать другую функцию и даже класс, но затем столкнулся с другими проблемами, такими как то, что число на кубике не изменится даже после того, как я несколько раз нажму кнопку и т. Д. Теперь у меня закончились идеи. Не могли бы вы отредактировать мой код, чтобы программа работала так же, как и раньше, но она также возвращала значение, показанное кубиками, чтобы я мог использовать то же значение в другом месте?
Ответ №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
начальное значение в глобальной области).
Комментарии:
1. Спасибо, однако я хотел бы, чтобы последний бросок кубика сохранялся как переменная, потому что мне нужно переместить фигуру в игре на другое поле, и это зависит от числа, сгенерированного кубиком. Вот почему мне нужно каким-то образом получить значение только на кубиках, а не выводить число в окне. Тем не менее, спасибо вам за ваше предложение!
2. Хм, вы можете получить доступ
dice
в любом месте вашего модуля после того, как он будет установлен один раз, а не только для печати. Он хранится как глобальная переменнаяdice
. Печать со второй кнопкой была просто для того, чтобы показать, чтоdice
также доступно в этой функцииlast
.3. Я думаю, что мне удалось выяснить, в чем была проблема — я хотел использовать
dice
ее еще до того, как она была определена. Спасибо за помощь!