Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » как задать команду для кнопок созданных при помощи цикла [RSS Feed]

#1 Сен. 6, 2016 22:36:48

nymphea
Зарегистрирован: 2016-09-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

как задать команду для кнопок созданных при помощи цикла

здравствуйте! вот я создаю 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 команд, всё ок, но получается слишком громоздко, ведь это абсолютно одинаковые кнопки

Отредактировано nymphea (Сен. 6, 2016 22:38:28)

Офлайн

#2 Сен. 6, 2016 22:47:40

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

как задать команду для кнопок созданных при помощи цикла

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

Офлайн

#3 Сен. 6, 2016 23:34:36

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

как задать команду для кнопок созданных при помощи цикла

Shaman
Не обязательно хранить

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

 #
def call(event):
    event.widget["text"] = "X"
but.bind("Button-1", call)

Офлайн

#4 Сен. 7, 2016 07:50:32

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

как задать команду для кнопок созданных при помощи цикла

4kpt_IV
Не обязательно хранить
Я об этом догадывался

Офлайн

#5 Сен. 7, 2016 22:39:25

nymphea
Зарегистрирован: 2016-09-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

как задать команду для кнопок созданных при помощи цикла

да, крестики-нолики, конечно) пробовала словарь, ничего не получилось, вообще не менялся текст нигде, подумаю ещё. сейчас сделала через 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)

Офлайн

#6 Сен. 8, 2016 08:39:52

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

как задать команду для кнопок созданных при помощи цикла

Ясен пень. Вы 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)

Офлайн

#7 Сен. 8, 2016 20:24:09

nymphea
Зарегистрирован: 2016-09-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

как задать команду для кнопок созданных при помощи цикла

4kpt_IV, спасибо, работает!

Офлайн

  • Начало
  • » GUI
  • » как задать команду для кнопок созданных при помощи цикла[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version