Код ниже создает окно с двумя видами: QListView
слева и QTreeView
справа. Оба представления имеют одинаковые Model()
, которые относятся к классу от QAbstractTableModel
. Я хочу оставить QListView
для отображения ключей словаря self.modelDict
. Пока правая сторона QTreeView
отображает значения словаря. Мне было рекомендовано использовать QSortFilterProxyModel
, чтобы все было сделано. Я был бы признателен, если вы покажете, как реализовать QSortFilterProxyModel
в этот код:Как правильно установить QSortFilterProxyModel
import os,sys
from PyQt4 import QtCore, QtGui
app=QtGui.QApplication(sys.argv)
elements={'Animals':{1:'Bison',2:'Panther',3:'Elephant'},'Birds':{1:'Duck',2:'Hawk',3:'Pigeon'},'Fish':{1:'Shark',2:'Salmon',3:'Piranha'}}
class Model(QtCore.QAbstractTableModel):
def __init__(self):
QtCore.QAbstractTableModel.__init__(self)
self.modelDict={}
self.items=[]
def rowCount(self, parent=QtCore.QModelIndex()):
return len(self.items)
def columnCount(self, index=QtCore.QModelIndex()):
return 3
def data(self, index, role):
if not index.isValid() or not (0<=index.row()<len(self.items)): return QtCore.QVariant()
if role==QtCore.Qt.DisplayRole: return self.items[index.row()]
def addItem(self, itemName=None, column=0):
totalItems=self.rowCount()
self.beginInsertRows(QtCore.QModelIndex(), totalItems+1, column)
if not itemName: itemName='Item %s'%self.rowCount()
self.items.append(itemName)
self.endInsertRows()
def buildItems(self):
(self.addItem(key) for key in self.modelDict)
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
mainLayout=QtGui.QHBoxLayout()
self.setLayout(mainLayout)
self.model=Model()
self.model.modelDict=elements
self.model.buildItems()
self.viewA=QtGui.QListView()
self.viewA.setModel(self.model)
self.viewB=QtGui.QTableView()
self.viewB.setModel(self.model)
mainLayout.addWidget(self.viewA)
mainLayout.addWidget(self.viewB)
self.show()
window=Window()
sys.exit(app.exec_())
Когда 'animals' выбрана в таблице слева, то, что делать вы ожидаете увидеть в правом столе? Что должно отображаться в столбцах 1, столбце2 и столбце3? – Ezee