Форум сайта python.su
здравствуйте! вот я создаю 9 одинаковых кнопок:
for i in range(2, 5): for j in range(2, 5): self.bttn = Button(self, text = "", command = self.move, width=3,height=1, bg="white") self.bttn.grid(row = i, column = j, sticky = W)
def move(self): self.bttn["text"] = "X"
Отредактировано nymphea (Сен. 6, 2016 22:38:28)
Офлайн
nympheaВы же их различаете по функциям - значит не одинаковые. Храните ссылки на них в подходящем контейнере: списке там, словаре.
ведь это абсолютно одинаковые кнопки
Офлайн
Shaman
Не обязательно хранить
nymphea
Если использовать bind, то при возникновении события в event передается ссылка на виджет.
# def call(event): event.widget["text"] = "X" but.bind("Button-1", call)
Офлайн
4kpt_IVЯ об этом догадывался
Не обязательно хранить
Офлайн
да, крестики-нолики, конечно) пробовала словарь, ничего не получилось, вообще не менялся текст нигде, подумаю ещё. сейчас сделала через bind, теперь крестик появляется на последней кнопке, если нажать на неё(и только на неё)
for i in range(2, 5): for j in range(2, 5): bttn = Button(self, text = "", width=3,height=1, bg="white") bttn.grid(row = i, column = j, sticky = W) def move(event): bttn["text"] = "X" bttn.bind("<Button-1>", move)
Отредактировано nymphea (Сен. 7, 2016 22:42:40)
Офлайн
Ясен пень. Вы bind назначили только последней кнопке. Его как-бы нужно назначать в цикле…
# def move(event): event.widget["text"] = "X" # for i in range(2, 5): for j in range(2, 5): bttn = Button(self, text="", width=3, height=1, bg="white") bttn.grid(row=i, column=j, sticky=W) bttn.bind("<Button-1>", move)
Отредактировано 4kpt_IV (Сен. 8, 2016 08:40:13)
Офлайн
4kpt_IV, спасибо, работает!
Офлайн