本文涉及:Windows操作系统,pyqt5,MySQL数据库,Qt Designer
直接上代码,注释很详细,有不清楚的可以在评论区给本仙女留言,看到第一时间回!如果没回,可能已经回天庭了。
from PyQt5.QtWidgets import * # 不止这一个外部库,其它的库我在需要用到时单独引入
class Demo(QWidget):
def __init__(self, parent = None):
super(Demo, self).__init__(parent)
self.initUI() # 初始化窗口
def initUI(self):
self.setWindowTitle("使用表格显示数据库中的数据")
self.resize(400, 200) # 设置窗口大小
vhayout = QHBoxLayout() # 创建水平布局
table = QTableWidget() # 创建表格
import pymysql # 引入连接数据库需要用到的包
# 开始连接本地数据库
db = pymysql.connect(host = "localhost", user = "root", password = "123456", database = "hello kitty", charset = "utf8")
cursor = db.cursor() # 使用cursor()方法获取数据库操作游标
cursor.execute("select * from books") # 执行SQL语句
result = cursor.fetchall() # 获取所有记录
row = cursor.rowcount # 获取记录个数,用于设置表格的行数
vol = len(result[0]) # 获取字段数,用于设置表格的列数
cursor.close() # 关闭游标
db.close() # 关闭连接
self.tableWidget.setRowCount(row) # 设置表格行数
self.tableWidget.setColumnCount(vol) # 设置表格列数
# 设置表头的名称
table.setHorizontalHeaderLabels(["id", "姓名", "年龄", "手机号", "身份证号"])
for i in range(row): # 遍历行
for j in range(vol): # 遍历列
data = QTableWidgetItem(str(result[i][j]))
table.setItem(i, j, data) # 转换后可插入表格
self.tableWidget.resizeColumnToContents(row) # 使列宽跟随内容改变
self.tableWidget.resizeRowToContents(vol) # 使行高跟随内容改变
self.tableWidget.setAlternatingRowColors(True) # 使表格颜色交错显示
vhayout.addWidget(table) # 将表格添加到水平布局中
self.setLayout(vhayout) # 设置当前窗口的布局方式
if __name__ == "__main__":
import sys
app = QApplication(sys.argv) # 创建窗口程序
demo = Demo() # 创建窗口类对象
demo.show() # 显示窗口
sys.exit(app.exec_())
代码写完了,可能表格是展示出来了,但是数据都是左对齐或者右对齐,你想设置成居中,或者你不想要表格的垂直标题等等,那么你就需要用到TableWidget控件的其它方法了。我把常用的方法都列在下面了,方便你找自己想要的。(我的天!怎么会有我这么好的人?你确定不给我点个关注?)
01 > setRowCount():设置表格的行数
02 > setColumnCount():设置表格的列数
03 > setHorizontalHeaderLabels():设置表格中的水平标题名称
04 > setVerticalHeaderLabels():设置表格中的垂直标题名称
05 > setItem():设置每个单元格中的内容
06 > setCellWidget():设置单元格的内容为QWidget控件
07 > resizeColumnsToContents():使表格列的宽度跟随内容改变
08 > resizeRowsToContents():使表格行的高度跟随内容改变
09 > setEditTriggers():设置表格是否可以编辑,取值如下:
❤ QAbstractItemView.NoEditTriggers0No:不能编辑表格内容
❤ QAbstractItemView.CurrentChanged1Editing:允许对单元格进行编辑
❤ QAbstractItemView.DoubleClicked2Editing:双击时可以编辑单元格
❤ QAbstractItemView.SelectedClicked4Editing:单击时可以编辑单元格
❤ QAbstractItemView.EditKeyPressed8Editing:按修改键时可以编辑单元格
❤ QAbstractItemView.AnyKeyPressed16Editing:按任意键都可以编辑单元格
10 > setSpan():合并单元格,该方法的4个参数如下:
❤ row:要改变的单元格的行索引
❤ column:要改变的单元格的列索引
❤ rowSpanCount:需要合并的行数
❤ columnSpanCount:需要合并的列数
11 > setShowGrid():设置是否显示网格线,默认不显示
12 > setSelectionBehavior():设置表格的选择行为,取值如下:
❤ QAbstractItemView.SelectItems0Selecting:选中当前单元格
❤ QAbstractItemView.SelectRows1Selecting:选中整行
❤ QAbstractItemView.DoubleClicked2Editing:选中整列
13 > setTextAlignment():设置单元格内文字的对齐方式,取值如下:
❤ Qt.AlignLeft:与单元格左边缘对齐
❤ Qt.AlignRight:与单元格有边缘对齐
❤ Qt.AlignHCenter:单元格内水平居中对齐
❤ Qt.AlignJustify:单元格内两端对齐
❤ Qt.AlignTop:与单元格顶部边缘对齐
❤ Qt.AlignBottom:与单元格底部边缘对齐
❤ Qt.AlignVCenter:单元格内垂直居中对齐
14 > setAlternatingRowColors():设置表格颜色交错显示
15 > setColumnWidth():设置单元格的宽度
16 > setRowHeight():设置单元格的高度
17 > sortItems():设置单元格内容的排序方式,取值如下:
❤ Qt.DescendingOrder:降序
❤ Qt.AscendingOrder:升序
18 > rowCount():获取表格中的行数
19 > columnCount():获取表格中的列数
20 > verticalHeader():获取表格的垂直标题头
21 > horizontalHeader():获取表格的水平标题头
QTableWidgetItem类表示QTableWidget中的单元格,一个表格是由多个单元格组成的。QTableWidgetItem类的常用方法及说明如下(太累了!写到这里,我感觉自己快要断气了~):
1 > setText():设置单元格的文本
2 > setCheckState():设置指定单元格的选中状态,取值如下:
❤ Qt.Checked:单元格选中
❤ Qt.Unchecked:单元格未选中
3 > setIcon():为单元格设置图标
4 > setBackground():设置单元格的背景色
5 > setForeground():设置单元格内文本的颜色
6 > setFont():设置单元格内文本的字体
7 > setSelected():设置是否选中单元格
8 > text():获取单元格的文本
结尾再补充一些代码示例(可能你会用到):
self.tableWidget.verticalHeader().setVisible(False) # 隐藏垂直标题
self.tableWidget.horizontalHeader().setVisible(False) # 隐藏水平标题
self.tableWidget.horizontalHeader().setStretchLastSection(True) # 设置最后一列自动填充容器
self.tableWidget.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch) # 设置整个表格为自动伸缩模式
self.tableWidget.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers) # 禁止编辑单元格
data.setForeground(QtGui.QBrush(QtGui.QColor("green"))) # 设置单元格文本颜色为绿色
data.setBackground(QtGui.QBrush(QtGui.QColor("yellow"))) # 设置单元格背景为黄色
table.sortItems(4, QtCore.Qt.DescendingOrder) # 设置降序排序
# 在指定列中显示图片
if j == 5: # 如果是第5列,则显示图片
data = QTableWidgetItem(QtGui.QIcon("hello.png"), str(result[i][j])) # 插入文字和图片
else:
data = QTableWidgetItem(str(result[i][j])) # 反之直接插入文字
以上代码、文字全部纯手打,所以可能会有些许错误,望各位看官见谅!