Найти - Пользователи
Полная версия: как задать команду для кнопок созданных при помощи цикла
Начало » GUI » как задать команду для кнопок созданных при помощи цикла
1
nymphea
здравствуйте! вот я создаю 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"

и текст меняется только на последней кнопке, а хотелось бы, чтобы менялся на той, которую нажимаешь. что я делаю не так? если создать отдельно 9 кнопок и 9 команд, всё ок, но получается слишком громоздко, ведь это абсолютно одинаковые кнопки

Shaman
nymphea
ведь это абсолютно одинаковые кнопки
Вы же их различаете по функциям - значит не одинаковые. Храните ссылки на них в подходящем контейнере: списке там, словаре.
ЗЫ
Подозреваю крестики-нолики)
4kpt_IV
Shaman
Не обязательно хранить

nymphea
Если использовать bind, то при возникновении события в event передается ссылка на виджет.

 #
def call(event):
    event.widget["text"] = "X"
but.bind("Button-1", call)
Shaman
4kpt_IV
Не обязательно хранить
Я об этом догадывался
nymphea
да, крестики-нолики, конечно) пробовала словарь, ничего не получилось, вообще не менялся текст нигде, подумаю ещё. сейчас сделала через 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) 
4kpt_IV
Ясен пень. Вы 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) 
nymphea
4kpt_IV, спасибо, работает!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB