pyqt5学习笔记——QListView与QListWidget

好久没来写博文了,前一段时间真的是忙成狗了,软件工程师非得让去干PLC,我真的也是服,整天朝九晚十一点半,项目周五交了差,钱的事儿还没有说,直接踢出项目组,美其名曰我为多个组服务,考核单从这一个项目组,来说对我不公平。

好了抱怨一下。
以后有时间会更新一些自己写项目遇到的问题。希望大家多多关注。


理解有限,目前只写道自己用到的地方,不做拓展研究,希望大家多理解。

我的环境:
win10、64位
pycharm 2019.1.1专业版
下面总的来说一下,我对题目中两个控件的了解

一、QListView

因为我的需求就是字符串列表,所以刚接触到的时候就感觉这东西麻烦,赋值还需要新建一个model

listview = QListView()
slm = QStringListModel()
data = ['1', '2', '3']
slm.setStringList(data)
listview.setModel(slm)

pyqt5学习笔记——QListView与QListWidget_第1张图片
毕竟我的需求比较简单,这么做就确实是费事儿了。毕竟人生苦短,有时候做出正确的选择要比努力更重要。

啥?你说要添加数据?
容我试试
emmm
因为数据与模型并未绑定,也就是说你更新数据,是没有用的,必须更新数据模型才有用。
(1)更新数据然后更新数据模型

		self.data.append('a')
		self.slm.setStringList(self.data)
		# 打印数据模型中的列表数据
		print(self.slm.stringList())

(2)直接更新数据模型
这种方式涉及到了个新类,QModelIndex 数据模型专用索引(抓狂啊)

		row = self.slm.rowCount()  # 获得最后一行的行数
        print(row)  # 行数显示
        self.slm.insertRow(row)  # 数据模型添加行
        index = self.slm.index(row)  # 获得数据模型的索引
        print(index)  # 显示数据模型的索引
        print(self.slm.setData(index, 'hhhh'))  # 添加数据返回值为bool
        print(self.slm.stringList())  # 查看数据模型中的数据
        print('原来的数据:%s' % self.data)  # 数据源中的数据

pyqt5学习笔记——QListView与QListWidget_第2张图片
啥?你说要删除数据?
请稍等(咋就是事儿那么多 Orz)
和上面一样两种
(1)直接更新数据源重新设置数据模型中的数据

        del self.data[2]  # 按照索引删除
        self.data.remove('4')  # 删除元素
        print("source data:%s" % self.data)
        self.slm.setStringList(self.data)
        print('StringModel data:%s' % self.slm.stringList())

在这里插入图片描述
(2)

		# self.slm.removeRow(1)  # 按照索引删除

        list = self.slm.stringList()  # 按照元素删除
        if "4" in list:
            row = list.index("4")
            self.slm.removeRow(row)  

        print(self.slm.stringList())
        print(self.data)

哎。好麻烦啊,还是那句话,我的需求简单,所以觉得麻烦,我都不明白为什么要用QModelIndex(数据模型专用索引)
等等咋还有removeColumn
。。。。。。
尴尬,原来这个类还运用在表格里用。

二、QListWidget

哇哇,到这里终于简单点了,毕竟符合我的需求啊~~啦啦啦
这个类是QListView的子类,操作相对容易一些

里面需要知道的一点是,有个QListWidgetItem这个类,是列表中的每一个单项哟~

(1)新建

		self.data = ['1', '2', '3', '4'] # source data
        self.listWidget.addItems(self.data) # add data to listwidget

(2)添加

		self.listWidget.addItem(QListWidgetItem('hhh'))
        self.listWidget.addItem("hhh")

(3)删除

	item  = self.listWidget.takeItem(1) # 根据所有获取item
	# 其实我尝试着,只有上面这一句就够了,
	self.listWidget.removeItemWidget(item) # 根据item删除数据
	# 但是只有下面这一句是删不掉的 
	self.listWidget.removeItemWidget(self.listWidget.item(1))


	# 根据内容删除
    del_str = '1'
    for i in range(count):
    	if del_str == self.listWidget.item(i).text():
        self.listWidget.takeItem(i)

周五了,要自己打扫卫生,其实有好多东西还想着总结,只能作罢了。

明天休息,有时间再发几篇,做这个软件遇到了好多小问题。

以后遇到问题先用TXT记录,尤其是已经解决的,项目做完以后整理到博客上来

算是替大家踩坑了。

如果大家有什么不懂的,可以留言。

知无不言,言无不尽。

以上。

你可能感兴趣的:(pyqt5)