Найти - Пользователи
Полная версия: pyQT4, один слот для нескольких команд меню, как?
Начало » GUI » pyQT4, один слот для нескольких команд меню, как?
1
The gray Cardinal
Динамически создаю несколько пунктов меню в цикле, примерно так:
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’, она у всех моих пунктов меню разная). Обработчик для всех пунктов меню мне нужен один, т.к. при запуске я даже не знаю, сколько именно пунктов меню у меня будет. Как сделать?
poltergeist
point = self.sender() вернёт QAction объект, у которого можно спросить point.text() и получить ‘name of point’. Также, в QAction можно запихнуть свои пользовательские данные (point.setData(…)) и потом вытянуть их обратно point.data().
The gray Cardinal
poltergeist
Спасибо! Оба твоих метода работают :).
Ещё один метод:
self.connect(point, QtCore.SIGNAL('triggered()'), lambda: self.point_event(pointName))
В этой ситуации слот получит дополнительный аргумент.
poltergeist
В довесок: menu.addAction(point_name, self.point_event) - чтобы лишние коннекты не делать:)
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