2012-06-18 2 views
0

는 내가 처음에 QTableWidget를 사용하여 데이터의 목록을 보여주는 GUI 프로그램 일하고 파이썬과 Qt는 초보자 ...PyQt4의 동적 QTableWidgetItem에 이벤트 리스너를 추가하는 방법은 무엇입니까?

입니다.

행은 setItem() 메소드를 사용하여 테이블에 삽입됩니다. 그들은 QTableWidgetItem 개체입니다.

이제 사용자가 특정 행 (QTableWidgetItem)을 클릭하여 선택하도록 허용하고 내 프로그램이 보조 QTableWidget을 채 웁니다.

나는 Signal and Slot이라는 것이 있다는 것을 배웠다. 나는 그것을 사용할 것인가? installEventFilter()을 사용하는 예도 있지만 QTableWidgetItem은 적합하지 않습니다.

답변

5

이를위한 가장 쉬운 방법은 바로 QTableWidget의 itemClicked - 신호 사용하는 것입니다 :

def handle_item_clicked(tableItem): 
    #the callback, called when an item is clicked, with the item as an argument 
    #populate the secondary table in some way 

#register the callback with the QTableWidget 
yourTableWidget.itemClicked.connect(handle_item_clicked) 

당신은 또한 당신에게 현재 및 이전 선택을 제공하는 currentItemChanged 신호를 사용할 수를 (당신은 지울 수 있습니다 예를 들면 있도록 사용자가 항목을 선택 취소 한 경우 보조 도구를 숨 깁니다.이 경우 현재 항목은 없음입니다.

1

Qt에는 "이벤트 리스너"가 없습니다. 언급 한 바와 같이, 당신은 connecting 신호를 통해 이러한 일을합니다. 예를 들어

: 당신이 myTableWidget을 클릭하면

QObject.connect(myTableWidget, QtCore.SIGNAL("clicked()"), self.foobar) 

이 방법 self.foobar()의 원인이됩니다 호출 할 수 있습니다. foobar 함수는 which item is selected을 검색하고이를 기반으로 두 번째 위젯을 채울 수 있습니다.

connect의 마지막 인수에서 메소드 이름 인 괄호 (foobar())를 사용하지 마십시오!

+0

왜이 고풍 연결 메커니즘을 사용합니까? –

+0

@BlaXpirit : 정교하게 신경 써야할까요? 무슨 의미에서 고풍? –

+0

@Kuba : l4mpi의 답변에 사용 된 구문이 어떻게 든 더 좋다고 생각합니다. 나 자신을 알지는 못했지만, 나는 항상 PyQt4에서 이것을 사용했으며 완벽하게 작동한다. – Junuxx