SqlTableModel 的使用

同时生效到数据库的修改
实际使用需要将QSqlTableModel 作为基类,重写某些方法,本地数据库的修改,作为设备的备份数据库,保留每次修改的数据库副本,也方便设备数据库的回滚操作
插入 和 删除 对于特定设备的参数,是不允许的,所以不需要考虑,这两个功能,当然维护数据库的小工具,可以添加
嵌入式现在对设备的数据可视化,也有一定的要求,方便数据统计,和分析,通信行业,亦是如此
Pyqt 和 QT 唯一区别在于 ,实时性的要求不一样,一般的问题分析和产品管理界面,Pyqt 完全够用,小白必备
pyqt 也是对C++ QT 的功能封装,还没有,指针的考虑,多舒服

python 复制代码
# This Python file uses the following encoding: utf-8
import sys

from PySide6.QtWidgets import QApplication, QWidget

# Important:
# You need to run the following command to generate the ui_form.py file
#     pyside6-uic form.ui -o ui_form.py, or
#     pyside2-uic form.ui -o ui_form.py
from form_ui import Ui_Widget

from PySide6.QtCore import *
from PySide6.QtWidgets import *
from PySide6.QtSql import *
from PySide6.QtGui import *

class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.ui = Ui_Widget()
        self.ui.setupUi(self)
        self.ui.Save.clicked.connect(self.Save)
        self.ui.Delete.clicked.connect(self.Delete)
        self.ui.Cancel.clicked.connect(self.Cancel)
        self.ui.Insert.clicked.connect(self.Insert)

        self.db=QSqlDatabase.addDatabase("QSQLITE")
        self.db.setDatabaseName("./drurmu.db")
        if self.db.open() is not True:
            print("open database error")
            return
        else:
            print("open database ok")

        self.tableModel=QSqlTableModel()
        self.tableModel.setEditStrategy(QSqlTableModel.EditStrategy.OnManualSubmit)
        self.tableModel.setTable("rmu")
        self.selModel=QItemSelectionModel(self.tableModel)
        self.selModel.currentChanged.connect(self.do_channged)
        self.selModel.currentRowChanged.connect(self.do_Row_Channged)
        
        if self.tableModel.select() :
            print("database querry successful")
        else:
            print("database querry failed")
            
        #Auto get filed name for ui tableView
        self.__getFiledNames()
        #QSqlTableModel need user define call functions
        self.ui.tableView.setModel(self.tableModel)
        
    def __getFiledNames(self):
        emptyRec=self.tableModel.record()
        self.fidNum={}
        for i in range(emptyRec.count()):
            self.fidNum[emptyRec.fieldName(i)]=i
        print(self.fidNum)
    
    def do_Row_Channged(self,current,preious):
        self.ui.Delete.setEnabled(current.isVaild())
        self.ui.Save.setEnabled(current.isVaild())
        
    def do_channged(self,current,preious):
        self.ui.Save.setEnabled(self.tableModel.isDirty())
        self.ui.Cancel.setEnabled(self.tableModel.isDirty())
    
    def Insert(self):
        curIndex=self.selModel.currentIndex()
        self.tableModel.insertRow(curIndex.row(),QModelIndex())
        self.selModel.clearSelection()
        self.selModel.setCurrentIndex(curIndex,QItemSelectionModel.SelectionFlag.Select)

    def Delete(self):
        curIndex=self.selModel.currentIndex()
        self.tableModel.removeRow(curIndex)
    
    def Cancel(self):
        self.tableModel.revertAll()

    def Save(self):
        if self.tableModel.submitAll():
            print("Commit all data successful")
        else:
            print("Commit all data erro")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = Widget()
    widget.show()
    sys.exit(app.exec())
相关推荐
Johny_Zhao5 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI3 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行3 天前
Linux和window共享文件夹
linux
木心月转码ing4 天前
WSL+Cpp开发环境配置
linux
崔小汤呀5 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端