pyqt5-QTableWidget

发布时间 2023-04-16 23:51:11作者: 挖洞404

1、介绍

这是pyqt的表格组件。

2、类和初始化

class QTableWidget(QTableView):
    def __init__(self, *__args):
        pass

示例:

self.table = QTableWidget(self.w)

3、属性

4、方法

(1)columnCount和rowCount

  • 返回int类型,即列数和行数,最低为0,即空白,此时没有表头

(2)setColumnCount和setRowCount

  • 设置int参数,即列数和行数。如果行置为0,即清除表格
  • 此时获取列数和行数,即为设置的值
  • 标题行和序号列不计入获取的行数和列数

(3)insertRow和insertColumn

  • 设置int参数,表示在指定位置插入行或者列
  • 最低为0,表示首行或者首列,设置时在最前进行插入。最大为rowCount()或columnCount(),设置时在最后进行插入。
  • 参数超出范围,则不进行插入行或列,也不报错

(4)removeRow和removeColumn

  • 设置int参数,表示移除指定的行或列
  • 最低为0,表示首行或者首列,设置时移除首行或首列。最大为rowCount()-1或columnCount()-1,设置时移除末行或末列。
  • 参数超出范围,则不移除行或列,也不报错

(5)setItem

  • 用于设置单元格的值,需要设置行索引和列索引,都是从0开始。也就是说需要在前面直接设置或者插入行和列,使得指定的单元格是先于存在的
  • 可以直接设置或间接设置
item = QTableWidgetItem()
item.setText('单元格')
self.table.setItem(0,0,item)
self.table.setItem(0,1, QTableWidgetItem('单元格'))

(6)item

  • 指定行索引和列索引,都是从0开始,返回指定的单元格对象,即QTableWidgetItem。
  • 对单元格可以进行操作
    • setText:即设置单元格文本。如果已经通过QTableWidgetItem为单元格赋过值,可以采用该方法进行快速设置。否则会报错
    • setFlags:Qt.ItemIsEnabled。设置该单元格只读模式
    • setTextAlignment 设置对其方式
    • text 获取单元格内容
item(0,0)
item(0,0).setText('更新')
item(0,0).setFlags(Qt.ItemIsEnabled) # 参数名字段不允许修改

from PySide2.QtCore import Qt
item(0,0).setTextAlignment(Qt.AlignHCenter)  #居中对其
item(0,0).text() # 获取单元格内容

(7)currentRow和currentColumn

  • 获取当前选中的行数和列数。
  • 当不存在行和列时,即行数和列数为0,则这两方法返回-1
  • 当存在行和列时,即使未选择,也返回0
  • 当选中之后,点击表格外的区域并不会改变当前选中行和列。
  • 选中标题行或者序号列的单元格,其列或者行有效,从0开始,而另外的行或者列为0
currentRow()
currentColumn()

(8)clearContents

  • 清除表格内容,但是不会删除单元格

(9)row和column

  • 如果没有查到,返回-1和-1
  • 这里的QTableWidgetItem并不是自定义创建的,而是基于事件等情况从表格对象直接获取的。前者查询不到任何东西,返回-1
def row(self, QTableWidgetItem):
        """ row(self, QTableWidgetItem) -> int """
        return 0
def column(self, QTableWidgetItem):
        """ column(self, QTableWidgetItem) -> int """
        return 0

(10)其他

# 设定第1列的宽度为 180像素
table.setColumnWidth(0, 180)
​
# 设定第2列的宽度为 100像素
table.setColumnWidth(1, 100)
​
# 表格控件宽度 随着父窗口的缩放自动缩放
table.horizontalHeader().setStretchLastSection(True)
  • 设置宽度
self.table.verticalHeader().setVisible(False)#隐藏垂直表头
self.table.verticalHeader().setVisible(False)#隐藏水平表头
self.table.setHorizontalHeaderLabels(['第一行列','第二列','第三列','第四列'])
self.table.setVerticalHeaderLabels(['第一行','第二行','第三行','第四行','第五行'])

设置背景色和字体色

# 设置背景色
self.ui.tableWidget.item(0, 2).setBackground(QBrush(QColor(0, 0, 255)))
# 设置前景色,即字体颜色
self.ui.tableWidget.item(0, 1).setForeground(QBrush(QColor(0, 0, 255)))

5、事件

self.table.cellChanged.connect()
  • 当用户修改了一个单元格的内容,会发出 cellChanged 信号,并且携带参数指明该单元格的行号和列号。
cellClicked(self, p_int, p_int_1)
cellDoubleClicked(self, p_int, p_int_1)
itemClicked(self, QTableWidgetItem)
itemDoubleClicked(self, QTableWidgetItem)

cellChanged(self, p_int, p_int_1):
columnCountChanged
currentCellChanged(self, p_int, p_int_1, p_int_2, p_int_3)
currentChanged(self, *args, **kwargs)
currentItemChanged(self, QTableWidgetItem, QTableWidgetItem_1)
dataChanged(self, *args, **kwargs)
horizontalScrollbarValueChanged(self, *args, **kwargs)
itemChanged(self, QTableWidgetItem)
itemSelectionChanged(self)
rowCountChanged(self, *args, **kwargs)
selectionChanged(self, *args, **kwargs)
verticalScrollbarValueChanged(self, *args, **kwargs)