我QTableWidget的被填充有可檢查項目第一列,所以我需要重載這些項目,以便能夠對它們進行排序:重載__lt__操作意外稱爲
class CheckBoxItem(QtGui.QTableWidgetItem):
def __init__(self, doSelect):
QtGui.QTableWidgetItem.__init__(self, doSelect)
self.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
if doSelect:
self.setCheckState(QtCore.Qt.Checked)
else:
self.setCheckState(QtCore.Qt.Unchecked)
def __lt__(self, other):
return self.checkState() < other.checkState()
它的工作原理是,當我點擊的標題預期該列:行被排序 - 首先檢查行,然後不檢查。
問題 occures的時候我不上任何列的標題點擊,然後使用tableWidget.setSortingEnabled(1)
,在這種情況下__lt__
被稱爲100+次,如果我有15〜行和隨意搭配一些行,而不是將它們分類。 我在打電話給setSortingEnabled(1)
之前選中/取消選中了一些項目,但我不希望__lt__
對它們進行比較,因爲我沒有單擊該列的標題對它們進行排序。
我有6列(0-5),如果我沒有點擊其中任何一個頭進行排序,tableWidget.horizontalHeader().sortIndicatorSection()
返回6
- 這是列外的列,這意味着表沒有排序。
那麼,爲什麼要調用__lt__
?重寫它時我錯過了什麼嗎? 我知道這將解決問題(比較項目只有該列的標題被點擊),但如何通過sortIndicatorSection
到__lt__
?
def __lt__(self, other):
if sortIndicatorSection==0:
return self.checkState() < other.checkState()
請幫助我,我是一個noob。