1.问题的提出:
一般我们在实际的应用场合中会有这种情况,通过数据库获得员工信息,信息中有工号,姓名,邮箱等等,现在想通过QListView显示员工姓名,选中行后能得到其其他列信息
2.解决方法:
1)初始化python的数据类型为列表list中包含元组tuple
self.strlist1 = [(1001, '阿桂1', '[email protected]'), (1002, '桂子哥', '[email protected]'),
(1003, '赵大', '[email protected]'), (1004, '钱钱', '[email protected]'),
(1005, '小李子', '[email protected]'), (1006, '孙二娘', '[email protected]'), (1007, '周小虎', '[email protected]'),
(1008, '李小龙', '[email protected]'), (1009, '天天', '[email protected]')]
2)使用PyQt5的QStandardItem和QStandardItemModel得到Model
def initData(self):
self.model1 = QStandardItemModel(self)
for t in enumerate(self.strlist1):
self.model1.setItem(t[0],0,QStandardItem(t[1][0]))
self.model1.setItem(t[0], 1, QStandardItem(t[1][1]))
self.model1.setItem(t[0], 2, QStandardItem(t[1][2]))
print(t[0],t[1][0],t[1][1],t[1][2])
self.listView.setModel(self.model1)
self.listView.setModelColumn(1)
self.lineEdit.textChanged[str].connect(self.searchdo)
self.listView.clicked.connect(self.showmess)
3)对QListView的内容进行筛查过滤显示
def searchdo(self,str):
self.tmplist1=[]
for ttstr in self.strlist1:
if str in ttstr[1]:
self.tmplist1.append(ttstr)
print(self.tmplist1)
self.model11 = QStandardItemModel(self)
for t in enumerate(self.tmplist1):
self.model11.setItem(t[0], 0, QStandardItem(t[1][0]))
self.model11.setItem(t[0], 1, QStandardItem(t[1][1]))
self.model11.setItem(t[0], 2, QStandardItem(t[1][2]))
print("model11",t[0], t[1][0], t[1][1], t[1][2])
self.listView.setModel(self.model11)
总结:重点在于1)将pythonlist+tuple转化为QStandardItem及QStandardItemModel的多列方式
2)通过QListView指定列进行显示指定列
self.listView.setModelColumn(1)
下载链接说明:
与前一篇博文:Python3+PyQt5基础(一)实现QListView搜索过滤问题_菜鸟得财的博客-CSDN博客
项目源码下载说明:两篇博文的源码集中在一个项目中
源码下载地址:https://download.csdn.net/download/gui818/85293181https://download.csdn.net/download/gui818/85293181