本文涉及: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]))    # 反之直接插入文字

        以上代码、文字全部纯手打,所以可能会有些许错误,望各位看官见谅!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐