tableview插入section 点击事件不能使用_使用pyside2做gui

这篇博客记录了使用PySide2创建一个图形界面文件搜索工具的过程,包括图形设计、数据库操作、控件设定和路径处理等。作者发现系统文件搜索慢是因为默认搜索文件内容,并非库功能问题。最后提到了从PySide2转换到PyQt5运行的情况。
摘要由CSDN通过智能技术生成

简单做个记录。

需求:因windows10的文件搜索太慢(装系统习惯停用库的功能),所以想弄个方便自己有时搜索的东西。大致架构,os模块处理路径及文件名,sqlite存储及检索,pyside2做图形,最后做完才发现这是假需求(系统文件搜索慢是因为默认搜索文件内容的)。

1、图形设计

以前用过pyqt5,本来想沿用的,使用QTdesigner发现生成的代码是用pyside2的,然后百度一下两者可算是亲兄弟,pyside2是商业用途不用付费的,就用pside2试试了。另设计的软件还有QTcreator,不过这玩意太难配置了,还不如QTdesigner方便,直接到python库里相应目录就可找到,不用费心找,转成py文件也很方便,到相应库路径,用pyside2-uic -o "C:untitled.py" "C:untitled.ui"这样的命令就可生成了,生成的文件直接在后面加上

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    MainWindow = QWidget()
    ui = Ui_Form()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())



就可以直接使用了,很是方便。

2、pyside2的数据库使用

用QtSql.QSqlDatabase.addDatabase连接sql驱动,使用内存型数据库

        self.db = QtSql.QSqlDatabase.addDatabase('QSQLITE', ':memory:')
        self.db.open()
        self.db.exec_("""create table t1(
        id integer primary key autoincrement,
        name text,
        long_path text
        )
        """)





对数据库的创建直接用self.db.exec_()执行就可以了,但是如果更新,修改,插入数据有变量的,需用它的专用方式,当然self.db.exec_()用字符拼接也可以。

                    query = QtSql.QSqlQuery(self.db)
                    query_str = 'insert into t1 (name,long_path) values (?,?)'
                    query.prepare(query_str)
                    query.bindValue(0, x1)
                    query.bindValue(1, x2)
                    query.exec_()











首先QtSql.QSqlQuery(self.db)创建QSqlQuery对象,这里要把db对象传过去,然后构建query_str,这里可用习惯的?占位符,也可用:n :p之类的方法占位,然后用prepare方法预处理,再用bindValue方法传入相应位置的信息,最后一定要query.exec_()才正常执行sql语句,每条语句都要query.exec_()一次。

由于sqlite是不支持检索后得出检索数量的,所以query.size方法是-1返回的,如要检索数据数量,可用sqlite的count检索,也可用先query.last()把指针移到检索结果最后条目,然后query.at()+1把当前指针位置再加1就是检索数量了,为不影响后面用query.next()拿数据,还得再用query.first(),query.previous()方法把指针恢复到之前的状态。

数据库搜索,如有变量的,一样需QtSql.QSqlQuery(),预编占位,传递信息,再执行,然后用next方法拿纪录

while quer.next():
    quer.value(0)





3、控件的一些设定

下面是用到的listview,radiobutton的一些设定

self.listView.doubleClicked.connect(self.open_select_file)  # 设置listview双击事件
self.radioButton.toggled.connect(self.check_key_word_result)  # 设置radioButton状态变化事件
self.listView.setEditTriggers(QAbstractItemView.NoEditTriggers)  # 设置listView无编辑状态
self.listView.setWordWrap(True)  # 设置listView自动换行



listview,tableview有些类似,个人感觉listview轻量,更快一点,tableview好看些。对listview要填数据,需要先把数据填到mode,再对listview应用mode,用起来感觉蛮麻烦的,大家用时再查文档即可。

4、关于路径拼合的问题

使用os.walk,拼接路径时可能出现正反斜杠不规范的情况,可用os.path.normpath(os.path.join(dir,file))这样的方法来规范化路径。

5、编译exe的问题

使用cx_Freeze编译,老提示无法导入shiboken2,然后文件也很大,有几百M。

6、PYQT5与PYSIDE2

把导入包头名由PYSIDE2改为PYQT5,居然直接跑了起来,除了介面略有变化。

7、程序效果图,没做任何美化

9226aabdfdfec20f251a4e6b5e53def6.png
在 PySide6 中使用 TableView 可以通过以下步骤实现: 1. 导入所需的模块: ```python from PySide6.QtCore import Qt from PySide6.QtGui import QStandardItemModel from PySide6.QtWidgets import QApplication, QTableView ``` 2. 创建一个 QStandardItemModel 对象,并设置表格的行数和列数: ```python model = QStandardItemModel() model.setRowCount(5) # 设置行数 model.setColumnCount(3) # 设置列数 ``` 3. 向模型中添加数据: ```python for row in range(5): for column in range(3): item = QStandardItem(f"({row}, {column})") model.setItem(row, column, item) ``` 4. 创建一个 QTableView 对象,并设置模型: ```python table_view = QTableView() table_view.setModel(model) ``` 5. 显示窗口: ```python app = QApplication([]) table_view.show() app.exec() ``` 这样就可以创建一个带有数据的 TableView 了。你也可以通过 model.setData() 方法来更新表格中的数据。 如果你想将结果输出到 TableView 中,可以先将结果存储在一个二维列表中,然后遍历列表,将数据添加到 QStandardItemModel 对象中,最后再将模型设置到 TableView 中。例如: ```python result = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] model = QStandardItemModel() model.setRowCount(len(result)) model.setColumnCount(len(result[0])) for row in range(len(result)): for column in range(len(result[0])): item = QStandardItem(str(result[row][column])) model.setItem(row, column, item) table_view.setModel(model) ``` 这样就可以将 result 中的数据输出到 TableView 中了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值