Kendi sınıfınızı QTableWidgetItem
türetebilir ve daha sonra kendi __lt__
operatörünüzü yazabilirsiniz. Bu, ekstra bir sütun ihtiyacını da hafifletir. Bir şey satırları: Bu benim için doğru sonuçlar üretmiştir
from PyQt4 import QtCore, QtGui
import sys
import datetime
class MyTableWidgetItem(QtGui.QTableWidgetItem):
def __init__(self, text, sortKey):
#call custom constructor with UserType item type
QtGui.QTableWidgetItem.__init__(self, text, QtGui.QTableWidgetItem.UserType)
self.sortKey = sortKey
#Qt uses a simple < check for sorting items, override this to use the sortKey
def __lt__(self, other):
return self.sortKey < other.sortKey
app = QtGui.QApplication(sys.argv)
window = QtGui.QMainWindow()
window.setGeometry(0, 0, 400, 400)
table = QtGui.QTableWidget(window)
table.setGeometry(0, 0, 400, 400)
table.setRowCount(3)
table.setColumnCount(1)
date1 = datetime.date.today()
date2 = datetime.date.today() + datetime.timedelta(days=1)
date3 = datetime.date.today() + datetime.timedelta(days=2)
item1 = MyTableWidgetItem(str(date1.strftime("%A %d. %B %Y")), str(date1))
item2 = MyTableWidgetItem(str(date2.strftime("%A %d. %B %Y")), str(date2))
item3 = MyTableWidgetItem(str(date3.strftime("%A %d. %B %Y")), str(date3))
table.setItem(0, 0, item1)
table.setItem(2, 0, item2)
table.setItem(1, 0, item3)
table.setSortingEnabled(True)
window.show()
sys.exit(app.exec_())
, kendinizi doğrulamak için çalıştırabilirsiniz. Hücre metninde "Cumartesi 20 Şubat 2010" gibi bir metin görüntülenir, ancak sütunu sıraladığınızda "2010-02-20" (iso formatlı) olan sortKey
alanı tarafından doğru şekilde sıralanır.
Ah, aynı zamanda daha __lt__
operatör bağlı olmadığını belirledik çünkü bu PySide ile ÇALIŞMAYACAKTIR unutulmamalıdır nereye-gibi PyQt4 beraberdir. Bir süre çalışmama nedenini ayıklamaya çalıştım ve PySide'den PyQt4'e geçtim ve iyi çalıştı. Bu gerçekten bana yardımcı oldu,
http://doc.qt.digia.com/4.5/qtablewidgetitem.html#operator-lt
Yüksek:
http://www.pyside.org/docs/pyside/PySide/QtGui/QTableWidgetItem.html
ama burada şudur:
__lt__
burada listelenen olmadığını fark edebilirsiniz. Ben kendi '__lt__' operatörüne ihtiyacım vardı, böylece ilk sütunda kontrol edilebilir tablewidget öğelerini sıralayabilirim, fakat şimdi 'tablewidget.setSortingEnabled (1)' kullandığımda '__lt__', ~ 15 satır olduğunda 100+ kere çağrılıyor sıralamak için o sütunun başlığına tıklamamış olsa bile. Daha büyük sorun bile, bu durumda onu doğru sıralamamasıdır. Birkaç satır hepsi bu kadar karışık, ama ben üstbilgi tıklandığında iyi çalışır. '__lt__' aşırı yüklenirken geçirdiğimiz bazı engelleme işlevleri var mı? – Aleksandar