当前位置:   article > 正文

Python+PyQt5+Mysql(二)通过QSqlQueryModel实现QTableView分页显示,表头排序等功能_pyqt5写一个分页表格界面

pyqt5写一个分页表格界面

1.总体样式预览

功能说明:

1).分页显示列表功能包括:前后分页,指定页面跳转,设置单页显示条数

        2).点击标题栏实现列表内容排序功能(这个功能花了我很长时间,在全网就没找到合适的解决方法,要不是参考了Qt开发经验,采用了变通解决办法才最终得以解决)

2.开发实现部分说明

        1)界面设计:通过Qt Designer实现基本界面

                

        2)将界面文件及资源文件通过转码得到tableview_ui.py,tableview_rc.py

        3)执行文件tableview_mysql_do.py部分代码如下:

  页面初始化部分代码:            

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. ' a Main using Ui file'
  4. __author__ = 'TianJiang Gui'
  5. import sys
  6. from PyQt5.QtWidgets import QApplication,QWidget,QFileDialog, QMessageBox,QComboBox, QCompleter, QLabel, QHeaderView
  7. from PyQt5 import QtGui
  8. from PyQt5.QtGui import QPalette, QBrush, QPixmap, QPainter
  9. from tableview_ui import Ui_MainWin
  10. from PyQt5.QtCore import *
  11. from utils.util_Commons import *
  12. from extendWidgets import ExtendedComboBox,ComboCheckBox
  13. from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel, QSqlQueryModel
  14. import pymysql
  15. class MainDo(QWidget, Ui_MainWin):
  16. def __init__(self):
  17. QWidget.__init__(self)
  18. Ui_MainWin.__init__(self)
  19. #---gtj 初始化连接数据库
  20. self.initConnDb()
  21. # 当前页
  22. self.currentPage = 0
  23. # 总页数
  24. self.totalPage = 0
  25. # 总记录数
  26. self.totalRecrodCount = 0
  27. # 每页显示记录数
  28. self.PageRecordCount = 5
  29. self.initUi()
  30. def initUi(self):
  31. self.setupUi(self)
  32. self.setWindowTitle("python+pyqt5+mysql 通过QSqlQueryModel实现QTableView 分页,表头排序")
  33. self.setAutoFillBackground(True)
  34. self.palette = QPalette()
  35. self.palette.setBrush(QPalette.Background, QBrush(QPixmap("./bg.png").scaled( # 缩放背景图.
  36. self.size(),Qt.IgnoreAspectRatio,Qt.SmoothTransformation)))
  37. self.setPalette(self.palette)
  38. #--------gtj 设置表格属性-------------------------------------------------
  39. # 表格宽度的自适应调整
  40. self.tableView.horizontalHeader().setStretchLastSection(True)
  41. # self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
  42. self.tableView.horizontalHeader().setSectionsClickable(True)
  43. # ------gtj 隔行颜色设置
  44. self.tableView.setAlternatingRowColors(True)
  45. self.tableView.setStyleSheet("alternate-background-color: rgb(209, 209, 209)"
  46. "; background-color: rgb(244, 244, 244);")
  47. #-------gtj 支持表头排序功能
  48. self.tableView.setSortingEnabled(True)
  49. self.tableView.horizontalHeader().setStyleSheet(
  50. "::section{background-color: pink; color: blue; font-weight: bold}")
  51. self.tableView.verticalHeader().hide()
  52. #----------------------------------------------------------------------------
  53. # 无边框
  54. # self.setWindowFlags(Qt.FramelessWindowHint)
  55. #---gtj 设置窗口透明
  56. # self.setAttribute(Qt.WA_TranslucentBackground)
  57. #---gtj右下角的小拖拽
  58. # self.setSizeGripEnabled(True)
  59. # ---gtj实现引用qss功能
  60. self.qss()
  61. #---gtj实现最小化,关闭功能
  62. # self.pushButton_min.clicked.connect(self.showMinimized)
  63. # self.pushButton_quit.clicked.connect(self.close)
  64. # 设置表格
  65. self.setTableView()
  66. # 信号槽连接
  67. self.prevButton.clicked.connect(self.onPrevButtonClick)
  68. self.nextButton.clicked.connect(self.onNextButtonClick)
  69. self.switchPageButton.clicked.connect(self.onSwitchPageButtonClick)
  70. # 以列表形式添加内容
  71. self.pagerecordcount.addItems(['5','25','50','100','200','300'])
  72. self.pagerecordcount.currentIndexChanged.connect(self.pagerecordcountChange)
  73. # -------------------------------------------------------------------------

 数据库连接部分代码:

  1. def initConnDb(self):
  2. try:
  3. # global db
  4. print(QSqlDatabase.drivers())
  5. self.db = QSqlDatabase.addDatabase('QMYSQL')
  6. self.db.setHostName('localhost')
  7. self.db.setDatabaseName('test-python-student')
  8. self.db.setUserName('user')
  9. self.db.setPassword('123456')
  10. if not self.db.open(): # 判断数据库是否打开
  11. print(self.db.lastError().text()) # 打印操作数据库时出现的错误
  12. return False
  13. else:
  14. print("连接成功")
  15. except:
  16. pass
  17. return

页面跳转部分代码

  1. # 前一页被按下
  2. def onPrevButtonClick(self):
  3. print('*** onPrevButtonClick')
  4. limitIndex = (self.currentPage - 2) * self.PageRecordCount
  5. self.recordQuery(limitIndex)
  6. self.currentPage -= 1
  7. self.updateStatus()
  8. # 后一页被按下
  9. def onNextButtonClick(self):
  10. print('*** onNextButtonClick')
  11. limitIndex = self.currentPage * self.PageRecordCount
  12. self.recordQuery(limitIndex)
  13. self.currentPage += 1
  14. self.updateStatus()
  15. # 转到页按钮被按下
  16. def onSwitchPageButtonClick(self):
  17. # 得到输入的字符串
  18. szText = self.switchPageLineEdit.text()
  19. # 得到页数
  20. pageIndex = int(szText)
  21. # 判断是否有指定页
  22. if pageIndex > self.totalPage or pageIndex < 1:
  23. QMessageBox.information(self, '提示', "没有指定的页面,重新输入")
  24. return
  25. # 得到查询起始行号
  26. limitIndex = (pageIndex - 1) * self.PageRecordCount
  27. # 记录查询
  28. self.recordQuery(limitIndex)
  29. # 设置当前页
  30. self.currentPage = pageIndex
  31. # 刷新状态
  32. self.updateStatus()

 最终项目文件:其中test_data_students.sql是测试数据,可将数据现行导入数据库中

项目工程文件下载地址:Python+PyQt5+Mysql通过QSqlQueryModel实现的QTableView分页显示,表头排序等功能-管理软件文档类资源-CSDN下载 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/264623
推荐阅读
相关标签
  

闽ICP备14008679号