2010-02-07 3 views
0

폼에 몇 개의 체크 박스가 있는데, 모두 동일한 로직을 구현할 것이므로 각각에 대해 별도의 이벤트 핸들러를 작성하고 싶지는 않습니다. 대신 어떤 체크 박스가 클릭되었는지 알 수있는 이벤트 핸들러 하나만 작성하려고합니다.PyQt, Qt, 하나의 이벤트 핸들러로 많은 아이템 작업하기

예.

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

가 여기에 몇 가지 변수에 현재 확인 상자 번호 (태그 속성을 수동으로 델파이 IDE에서 설정 한) 기억 : 델파이에서 나는이 방법을 사용할 수 있습니다.

이벤트 핸들러에 sender 인수가 없으므로 검색하여 Qt를 사용하여 구현할 수 없습니다.

나는 이런 식으로 구현,하지만 편리 아니다 :
# 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 

감사합니다.

답변

3

슬롯에서 QObject::sender()을 사용하여 신호를 보낸 사람을 찾을 수 있습니다.
QSignalMapper도 이러한 문제를 해결하기위한 것입니다.

관련 문제