Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » pyQT4, один слот для нескольких команд меню, как? [RSS Feed]

#1 Ноя. 17, 2008 14:43:44

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, один слот для нескольких команд меню, как?

Динамически создаю несколько пунктов меню в цикле, примерно так:

point = QtGui.QAction('name of point', self)
self.connect(point, QtCore.SIGNAL('triggered()'), self.point_event)
Здесь self - это объект моего класса окна, наследник QMainWindow, а self.point_event - функция в этом моём классе.
При таком связывании сигнала со слотом функция self.point_event получит только один аргумент - self. А мне в этой функции нужно узнать, какой именно пункт меню её вызвал (например, хотя бы как-то получить строку ‘name of point’, она у всех моих пунктов меню разная). Обработчик для всех пунктов меню мне нужен один, т.к. при запуске я даже не знаю, сколько именно пунктов меню у меня будет. Как сделать?



Отредактировано (Ноя. 17, 2008 14:48:57)

Офлайн

#2 Ноя. 17, 2008 15:36:04

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, один слот для нескольких команд меню, как?

point = self.sender() вернёт QAction объект, у которого можно спросить point.text() и получить ‘name of point’. Также, в QAction можно запихнуть свои пользовательские данные (point.setData(…)) и потом вытянуть их обратно point.data().



Офлайн

#3 Ноя. 17, 2008 15:56:22

The gray Cardinal
От:
Зарегистрирован: 2007-03-07
Сообщения: 422
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, один слот для нескольких команд меню, как?

poltergeist
Спасибо! Оба твоих метода работают :).
Ещё один метод:

self.connect(point, QtCore.SIGNAL('triggered()'), lambda: self.point_event(pointName))
В этой ситуации слот получит дополнительный аргумент.



Офлайн

#4 Ноя. 17, 2008 16:09:11

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

pyQT4, один слот для нескольких команд меню, как?

В довесок: menu.addAction(point_name, self.point_event) - чтобы лишние коннекты не делать:)



Офлайн

  • Начало
  • » GUI
  • » pyQT4, один слот для нескольких команд меню, как?[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version