Вы уже делаете то, что вам нужно сделать. Ваш пример кода устанавливает self.diceList
в какое-то значение. В любом другом месте вашего кода вы можете напрямую использовать self.diceList
.
Кстати, вы пишете код, который со временем будет сложно поддерживать. Например, что если вы измените метку костей на «Dice One» или просто «One» вместо «Dice 1»? Или, как ваше приложение прогрессирует, вы могли бы хотеть графические изображения вместо текста на кнопках. Вам придется изменить код, который анализирует имя кнопки. Вы по сути кодируете информацию в метке кнопки, что не очень хорошая идея.
Простое решение, которое также делает ваш метод chooseDice
более простым и понятным, состоит в передаче номера кости в обратном вызове. Например:
self.button1.configure(command=lambda btn=self.button1: self.chooseDice(btn, 1))
Приведенный выше метод передает два параметра методу chooseDice
: экземпляр кнопки (чтобы ее можно было отключить) и номер кнопки (чтобы вам не приходилось анализировать имя кнопки, чтобы получить его)
Это также позволяет создавать кубики в цикле, а не жестко кодировать несколько копий одного и того же блока кода. Вот полный рабочий пример:
from Tkinter import *
class GraphicsInterface:
def __init__(self):
self.window = Tk()
self.window.geometry("720x500")
self.clicked=[]
self.buttons = []
for n in range(1, 3):
btn = Button(text="Button " + str(n))
btn.configure(command=lambda btn=btn, n=n: self.chooseDice(btn, n))
btn.pack()
self.buttons.append(btn)
btn = Button(text="Go!", command=self.go)
btn.pack()
self.window.mainloop()
def go(self):
print "buttons:", self.clicked
self.reset()
def reset(self):
'''Reset all the buttons'''
self.clicked = []
for button in self.buttons:
button.configure(state="normal")
def chooseDice(self, widget, number):
self.clicked.append(number)
widget.configure(state="disabled")
app = GraphicsInterface()
Наконец, несколько последних советов:
Не используйте place
, это затрудняет создание ваших графических интерфейсов, и они не будут хорошо реагировать на изменения размера окна, изменения шрифта, изменения платформы и т. Д. Используйте pack
и grid
вместо. Кроме того, не создавайте кнопки фиксированной ширины. Опять же, это для лучшей обработки изменений в шрифтах. Есть моменты, когда вам нужны кнопки фиксированной ширины, но не похоже, что у вашего кода есть основания их использовать.
Наконец, я не знаю, чего вы на самом деле пытаетесь достичь, но обычно, если вы используете кнопки для отслеживания состояния (нажата эта штука или нет?), Вы хотите использовать флажки (выберите N из N) или радиокнопки (выберите 1 из N). Возможно, вы захотите переключиться на них вместо кнопок.