[PYQT5]ListViewQStringListModel增-删-改实现 增-删-改 百度了半天都没有详细说的,半猜半试做出来,其中还有⼀些不太理解,先把我做出来的记录下来。
初步需要如下功能空间: listview pushbutton(删除按钮) lineedit(输⼊编辑栏) pushbutton(新增按钮)
基本界⾯如下:
⼀、实现界⾯布局及初始化
def initUI(self):
layout = QGridLayout()
self.listview = QListView() # 创建listview对象
# self.listview.setEditTriggers(QAbstractItemView.NoEditTriggers) # 屏蔽双击编辑listview
self.stringlistmodel = QStringListModel() # 创建stringlistmodel对象
self.stringlistmodel.setStringList(self.string_list) # 把数据赋值到 model 上
self.listview.setModel(self.stringlistmodel) # 把 view 和 model 关联
self.t(self.save)
# 设置布局qt listview
self.delete_button = QPushButton()
self.delete_button.setText("删除")
self.delete_t(self.delete_kw)
self.line_edit = QLineEdit()
self.add_button = QPushButton()
self.add_button.setText("增加")
self.add_t(self.add_kw)
layout.addWidget(self.listview, 0, 0)
layout.addWidget(self.delete_button, 0, 1)
layout.addWidget(self.line_edit, 1, 0)
layout.addWidget(self.add_button, 1, 1)
self.setLayout(layout)
设置⽹格布局,分别添加四个空间,并把数据加到model上,model 和 view 关联。
⼆、添加项⽬
def add_kw(self):
"""
把编辑栏 line_edit 中的字符添加到 listmodel 中
:return:
"""
row = wCount()
kw = self.()
self.stringlistmodel.insertRow(row)
self.stringlistmodel.setData(self.stringlistmodel.index(row), kw)
self.line_edit.setText("")
添加按钮 clicked 信号关联此槽函数;
1. 先获取编辑栏的值,即要增加的字符 kw
2. 获取model的⾏数,这个得到的是⼀个 整数
3. 通过 insertRow ⽅法添加⼀⾏,其参数应该是⾏数,从0开始算
4. 通过 setData ⽅法设置条⽬的值,第⼀个参数是第⼏⾏,第⼆个参数是值,测试时,如果第⼀个参数只是传⼊整形则会报错,需要通
过 model.index(row) 传⼊,应该是要求 QModelIndex类型的对象
def delete_kw(self):
"""删除 listmodel 中选中的项"""
index = self.listview.currentIndex()
w())
w())
5.把 lineedit 设回空值
三、删除项⽬
def delete_kw(self):
"""删除 listmodel 中选中的项"""
index = self.listview.currentIndex()
w())
w())
1. view 的 currentIndex ⽅法 返回当前选中的项
2. model 的 removerow ⽅法删除对应列的项
四、编辑项⽬
双击listview即可实现编辑。
五、保存数据
上述操作只是修改model的数据,还需要把数据存到原始数据集中
def save(self):
self.string_list = self.stringlistmodel.stringList()
通过关联model的datachanged信号到该槽函数中,每⼀次的数据改动,都会把数据存⼊原始数据集中
六、全部代码
from PyQt5.QtWidgets import *
import sys
from PyQt5.QtCore import *
class Listview_Dialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.string_list = ["aa", "bb", "cc"] # 初始数据
self.initUI()
def initUI(self):
layout = QGridLayout()
self.listview = QListView() # 创建listview对象
# self.listview.setEditTriggers(QAbstractItemView.NoEditTriggers) # 屏蔽双击编辑listview self.stringlistmodel = QStringListModel() # 创建stringlistmodel对象
self.stringlistmodel.setStringList(self.string_list) # 把数据赋值到 model 上
self.listview.setModel(self.stringlistmodel) # 把 view 和 model 关联
self.t(self.save)
# 设置布局
self.delete_button = QPushButton()
self.delete_button.setText("删除")
self.delete_t(self.delete_kw)
self.line_edit = QLineEdit()
self.add_button = QPushButton()
self.add_button.setText("增加")
self.add_t(self.add_kw)
layout.addWidget(self.listview, 0, 0)
layout.addWidget(self.delete_button, 0, 1)
layout.addWidget(self.line_edit, 1, 0)
layout.addWidget(self.add_button, 1, 1)
self.setLayout(layout)
def add_kw(self):
"""
把编辑栏 line_edit 中的字符添加到 listmodel 中
:return:
"""
row = wCount()
kw = self.()
self.stringlistmodel.insertRow(row)
self.stringlistmodel.setData(self.stringlistmodel.index(row), kw)
self.line_edit.setText("")
def delete_kw(self):
"""删除 listmodel 中选中的项"""
index = self.listview.currentIndex()
w())
w())
def save(self):
self.string_list = self.stringlistmodel.stringList()
#print(self.string_list)
@staticmethod
def test():
import sys
app = QApplication(sys.argv)
window = Listview_Dialog() # 主窗
window.show()
<_())
if __name__ == "__main__": st()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论