QTreeWidget에서 itemChecked 및 itemUnchecked 신호는 어디에 있습니까?PyQt4에서 QTreeWidget에 대한 itemChecked 및 itemUnchecked 신호를 구현하는 방법은 무엇입니까?
self.treeWidget.itemClicked.connect (self.handle)
def handle (item, column):
print 'emitted!', item.text(column)
if item.checkState(column) == QtCore.Qt.Checked:
# there are a lot of my functions inside which work with item data
self.handleChecked(item, column)
elif item.checkState(column) == QtCore.Qt.Unchecked:
self.handleUnchecked(item, column)
을하지만 itemClicked이 경우 정말 많이 방출하기 때문에 그것은 나에 대한 나쁜 해결책 : 현재의 순간
Qt Signals: (quote from PyQt4 QTreeWidget documentation page)
void currentItemChanged (QTreeWidgetItem *,QTreeWidgetItem *)
void itemActivated (QTreeWidgetItem *,int)
void itemChanged (QTreeWidgetItem *,int)
void itemClicked (QTreeWidgetItem *,int)
void itemCollapsed (QTreeWidgetItem *)
void itemDoubleClicked (QTreeWidgetItem *,int)
void itemEntered (QTreeWidgetItem *,int)
void itemExpanded (QTreeWidgetItem *)
void itemPressed (QTreeWidgetItem *,int)
void itemSelectionChanged()
나는 이런 식으로 해결. 그것은 절대적으로 불필요한 항목 텍스트의 왼쪽/오른쪽 마우스 클릭의 경우에 발생합니다 (self.handleChecked 내에서 무거운 기능을 가지고 있으며 상황에 맞는 메뉴 열기에서 불필요한 호출은 매우 형편 없음).
글쎄, 나는 또한 itemChanged를 사용하려고 :
self.treeWidget.itemChanged.connect (self.handle)
하지만 이런 식으로 상황이 더 악화입니다! self.handle 함수는 self.handleChecked 내 함수가 항목 데이터를 변경하고이 신호가 반복해서 방출되기 때문에 스스로를 무한대 이상으로 재귀 적으로 호출합니다. 또한 항목 체크 박스 토글 링에서만 발생하는 신호가 필요합니다.
누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까? 핸들러가 완료 될 때까지
은'itemChanged' 신호를 사용할 수있는 권리 하나는 확실히이다. "self.handle calls recursively"의 의미는 무엇입니까? 정확히 무엇이 그것에 대해 "받아 들일 수없는"것입니까? – ekhumoro
@ekhumoro, 게시물을 업데이트했습니다. –
확인 된 상태가 변경 될 때만 신호를 방출 할 수있는 해결책으로 내 대답을 업데이트했습니다. 신호를 차단하는 것보다 더 나은 방법을 찾을 수 있습니다. – ekhumoro