赞
踩
1.总体样式预览
功能说明:
1).分页显示列表功能包括:前后分页,指定页面跳转,设置单页显示条数
2).点击标题栏实现列表内容排序功能(这个功能花了我很长时间,在全网就没找到合适的解决方法,要不是参考了Qt开发经验,采用了变通解决办法才最终得以解决)
2.开发实现部分说明
1)界面设计:通过Qt Designer实现基本界面
2)将界面文件及资源文件通过转码得到tableview_ui.py,tableview_rc.py
3)执行文件tableview_mysql_do.py部分代码如下:
页面初始化部分代码:
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- ' a Main using Ui file'
-
- __author__ = 'TianJiang Gui'
-
- import sys
- from PyQt5.QtWidgets import QApplication,QWidget,QFileDialog, QMessageBox,QComboBox, QCompleter, QLabel, QHeaderView
- from PyQt5 import QtGui
- from PyQt5.QtGui import QPalette, QBrush, QPixmap, QPainter
- from tableview_ui import Ui_MainWin
- from PyQt5.QtCore import *
- from utils.util_Commons import *
-
- from extendWidgets import ExtendedComboBox,ComboCheckBox
-
- from PyQt5.QtSql import QSqlDatabase, QSqlQuery, QSqlTableModel, QSqlQueryModel
-
- import pymysql
-
- class MainDo(QWidget, Ui_MainWin):
- def __init__(self):
- QWidget.__init__(self)
- Ui_MainWin.__init__(self)
-
- #---gtj 初始化连接数据库
- self.initConnDb()
-
- # 当前页
- self.currentPage = 0
- # 总页数
- self.totalPage = 0
- # 总记录数
- self.totalRecrodCount = 0
- # 每页显示记录数
- self.PageRecordCount = 5
-
- self.initUi()
-
- def initUi(self):
- self.setupUi(self)
- self.setWindowTitle("python+pyqt5+mysql 通过QSqlQueryModel实现QTableView 分页,表头排序")
- self.setAutoFillBackground(True)
-
- self.palette = QPalette()
- self.palette.setBrush(QPalette.Background, QBrush(QPixmap("./bg.png").scaled( # 缩放背景图.
- self.size(),Qt.IgnoreAspectRatio,Qt.SmoothTransformation)))
- self.setPalette(self.palette)
- #--------gtj 设置表格属性-------------------------------------------------
- # 表格宽度的自适应调整
- self.tableView.horizontalHeader().setStretchLastSection(True)
- # self.tableView.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
- self.tableView.horizontalHeader().setSectionsClickable(True)
- # ------gtj 隔行颜色设置
- self.tableView.setAlternatingRowColors(True)
- self.tableView.setStyleSheet("alternate-background-color: rgb(209, 209, 209)"
- "; background-color: rgb(244, 244, 244);")
- #-------gtj 支持表头排序功能
- self.tableView.setSortingEnabled(True)
- self.tableView.horizontalHeader().setStyleSheet(
- "::section{background-color: pink; color: blue; font-weight: bold}")
- self.tableView.verticalHeader().hide()
- #----------------------------------------------------------------------------
- # 无边框
- # self.setWindowFlags(Qt.FramelessWindowHint)
-
- #---gtj 设置窗口透明
- # self.setAttribute(Qt.WA_TranslucentBackground)
-
- #---gtj右下角的小拖拽
- # self.setSizeGripEnabled(True)
-
- # ---gtj实现引用qss功能
- self.qss()
-
- #---gtj实现最小化,关闭功能
- # self.pushButton_min.clicked.connect(self.showMinimized)
- # self.pushButton_quit.clicked.connect(self.close)
-
- # 设置表格
- self.setTableView()
-
- # 信号槽连接
- self.prevButton.clicked.connect(self.onPrevButtonClick)
- self.nextButton.clicked.connect(self.onNextButtonClick)
- self.switchPageButton.clicked.connect(self.onSwitchPageButtonClick)
-
-
-
- # 以列表形式添加内容
- self.pagerecordcount.addItems(['5','25','50','100','200','300'])
- self.pagerecordcount.currentIndexChanged.connect(self.pagerecordcountChange)
- # -------------------------------------------------------------------------
数据库连接部分代码:
- def initConnDb(self):
- try:
- # global db
- print(QSqlDatabase.drivers())
- self.db = QSqlDatabase.addDatabase('QMYSQL')
- self.db.setHostName('localhost')
- self.db.setDatabaseName('test-python-student')
- self.db.setUserName('user')
- self.db.setPassword('123456')
- if not self.db.open(): # 判断数据库是否打开
- print(self.db.lastError().text()) # 打印操作数据库时出现的错误
- return False
- else:
- print("连接成功")
- except:
- pass
- return
页面跳转部分代码
- # 前一页被按下
- def onPrevButtonClick(self):
- print('*** onPrevButtonClick')
- limitIndex = (self.currentPage - 2) * self.PageRecordCount
- self.recordQuery(limitIndex)
- self.currentPage -= 1
- self.updateStatus()
-
- # 后一页被按下
- def onNextButtonClick(self):
- print('*** onNextButtonClick')
- limitIndex = self.currentPage * self.PageRecordCount
- self.recordQuery(limitIndex)
- self.currentPage += 1
- self.updateStatus()
-
- # 转到页按钮被按下
- def onSwitchPageButtonClick(self):
- # 得到输入的字符串
- szText = self.switchPageLineEdit.text()
-
- # 得到页数
- pageIndex = int(szText)
- # 判断是否有指定页
- if pageIndex > self.totalPage or pageIndex < 1:
- QMessageBox.information(self, '提示', "没有指定的页面,重新输入")
- return
-
- # 得到查询起始行号
- limitIndex = (pageIndex - 1) * self.PageRecordCount
-
- # 记录查询
- self.recordQuery(limitIndex)
- # 设置当前页
- self.currentPage = pageIndex
- # 刷新状态
- self.updateStatus()
最终项目文件:其中test_data_students.sql是测试数据,可将数据现行导入数据库中
项目工程文件下载地址:Python+PyQt5+Mysql通过QSqlQueryModel实现的QTableView分页显示,表头排序等功能-管理软件文档类资源-CSDN下载
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。