Подкласс QPushButton

Я искал способ подкласса QPushButton, поэтому я могу подключить сигнал «нажал» при создании новой кнопки, например:

Btn = CustomButtonClass('Text', clicked='lambda: self.func(par)')

Пока - безуспешно.

Я предполагаю, что дело в том, чтобы передать правильные параметры в init() из CustomButtonClass, но понятия не имею, что и почему.

Что у меня есть:

class CustomButtonClass(QtGui.QPushButton):
    def __init__(self, text, parent=None):
        super().__init__()

Я также заметил, что:

Btn.clicked.connect(lambda: self.func(par))

Тоже не работает.

Должен ли я переопределять событие mouseReleaseEvent QPushButton или создавать собственный сигнал, чтобы выполнить мою задачу?


person Community    schedule 27.03.2016    source источник


Ответы (1)


Вам не нужно создавать подкласс, потому что и PyQt, и PySide уже имеют эту функцию (см. using-keyword-arguments" rel="nofollow">Подключение сигналов с использованием аргументов ключевых слов в документации PyQt).

Демо:

>>> from PyQt4 import QtGui
>>> app = QtGui.QApplication([])
>>> btn = QtGui.QPushButton('Test', clicked=lambda: print('Hello World!'))
>>> btn.click()
Hello World!

Если вам все еще нужно создать подкласс, то, конечно, вы можете просто сделать:

class CustomButtonClass(QtGui.QPushButton):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
person ekhumoro    schedule 27.03.2016
comment
Возможно, мой вопрос был недостаточно конкретным... Ну, мне действительно нужен собственный подкласс, потому что мне нужно дополнительное форматирование и функциональность для моих кнопок. Но с вашим ответом мне пришла в голову идея, что я могу переопределить QPushButton mouseReleaseEvent с моими инструкциями для конкретного приложения... Большое спасибо! :) - person ; 28.03.2016
comment
@KrzysiekŁuczak. Ничего подобного делать не нужно — мой ответ все равно сработает. Я добавил еще немного кода, чтобы показать, что я имею в виду. - person ekhumoro; 28.03.2016
comment
Поздний ответ, но... В моем случае дело было в том, что я пропустил *args и **kwargs в аргументах __init__() - person ; 04.11.2016