PyQt, Qt, один обработчик событий, работающий со многими элементами

StackOverflow https://stackoverflow.com/questions/2216428

  •  19-09-2019
  •  | 
  •  

Вопрос

У меня есть пара флажков в моей форме, и я не хочу писать отдельный обработчик событий для каждого, потому что все они будут реализовывать одну и ту же логику.Вместо этого я хочу написать только один обработчик событий, который будет знать о том, какой флажок был нажат.

Например.в Delphi я могу использовать это таким образом:

function click_handler(sender):
begin
    checked_box := sender.tag;
end;

Здесь я помню текущий номер флажка в какой-то переменной (свойство tag было задано вручную в Delphi IDE).

Я искал и не могу найти, как я могу реализовать это с помощью Qt, потому что обработчики событий не имеют sender аргумент.

Я реализовал это следующим образом, но это не удобно:

# assign handlers (n assignments)
checkbox_1.clicked.connect(self.cb_1_click)
...
checkbox_<n>.clicked.connect(self.cb_<n>_click)

# separate handler for each check box (n functions, doing the same stupid work)
def cb_1_click:
    self.cb_click(sender=1)
...
def cb_<n>_click:
    self.cb_click(sender=n)

# main check box click logic (1 function)
def cb_click(sender):
    # do something common for all checkboxes

Спасибо.

Это было полезно?

Решение

Вы можете использовать QObject::отправитель() в слотах, чтобы узнать, кто испустил сигнал.
Также вы, возможно, захотите проверить QSignalMapper (Сигнальный преобразователь) который предназначен именно для решения этих проблем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top