Python: Получение переменной из функции, которая генерирует случайные числа нажатием кнопки

#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 ее еще до того, как она была определена. Спасибо за помощь!