Pyqt的QTableWidget组件的使用
作者:爬无止境
QTableWidget 是 PyQt6 中的一个表格控件,用于显示和编辑二维表格数据。它继承自 QTableView,提供了更简单的方式来处理表格数据,适合用于需要展示结构化数据的场景。
1. 常用方法
1.1 构造函数
QTableWidget(parent: QWidget = None):创建一个空的表格控件。QTableWidget(rows: int, columns: int, parent: QWidget = None):创建一个指定行数和列数的表格控件。
1.2 设置行列数
setRowCount(rows: int):设置表格的行数。setColumnCount(columns: int):设置表格的列数。rowCount() -> int:获取表格的行数。columnCount() -> int:获取表格的列数。
1.3 设置表头
setHorizontalHeaderLabels(labels: List[str]):设置水平表头的标签。setVerticalHeaderLabels(labels: List[str]):设置垂直表头的标签。horizontalHeader() -> QHeaderView:获取水平表头对象。verticalHeader() -> QHeaderView:获取垂直表头对象。
1.4 设置单元格内容
setItem(row: int, column: int, item: QTableWidgetItem):设置指定单元格的内容。item(row: int, column: int) -> QTableWidgetItem:获取指定单元格的内容。takeItem(row: int, column: int) -> QTableWidgetItem:移除指定单元格的内容并返回。
1.5 设置单元格属性
setCellWidget(row: int, column: int, widget: QWidget):在指定单元格中放置一个控件(如按钮、下拉框等)。cellWidget(row: int, column: int) -> QWidget:获取指定单元格中的控件。setSpan(row: int, column: int, rowSpan: int, columnSpan: int):合并单元格。
1.6 选择模式
setSelectionMode(mode: QAbstractItemView.SelectionMode):设置选择模式(如单选、多选等)。setSelectionBehavior(behavior: QAbstractItemView.SelectionBehavior):设置选择行为(如选择行、选择列等)。
1.7 信号
cellChanged(row: int, column: int):当单元格内容发生变化时触发。cellClicked(row: int, column: int):当单元格被点击时触发。cellDoubleClicked(row: int, column: int):当单元格被双击时触发。
2. 例子
import os
import sys
import webbrowser
import qt_material
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
self.resize(400, 300)
self.init_widget()
self.init_signal()
self.init_getdata()
self.init_layout()
def init_widget(self):
# tablewidget
self.table = QTableWidget()
self.table.setColumnCount(2)
self.table.setHorizontalHeaderLabels(['网站', 'Url'])
self.table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
self.table.setAlternatingRowColors(True)
self.table.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers) # 无法编辑
def init_getdata(self):
row_count = self.table.rowCount()
self.table.setRowCount(row_count + 1)
self.table.setItem(0, 0, QTableWidgetItem('百度'))
self.table.setItem(0, 1, QTableWidgetItem('https://www.baidu.com/'))
row_count = self.table.rowCount()
self.table.setRowCount(row_count + 1)
self.table.setItem(1, 0, QTableWidgetItem('腾讯视频'))
self.table.setItem(1, 1, QTableWidgetItem('https://v.qq.com/'))
def init_signal(self):
self.table.cellDoubleClicked.connect(self.open_url) # 双击打开网页
def init_layout(self):
v_layout = QVBoxLayout()
v_layout.addWidget(self.table)
self.setLayout(v_layout)
def open_url(self, row, column):
print(f'{row} {column}')
if int(column) == 1:
url = self.table.item(row, column).text()
webbrowser.open(url)
if __name__ == '__main__':
os.environ["QT_IM_MODULE"] = "ibus" # mac系统解决输入法不兼容
app = QApplication(sys.argv)
qt_material.apply_stylesheet(app, theme='light_pink.xml')
window = Window()
window.show()
sys.exit(app.exec())
3. 总结
优点
简单易用:提供了直接操作表格数据的接口。
灵活性高:支持动态加载数据、编辑单元格内容和嵌入控件。
功能丰富:支持表头设置、单元格合并、选择模式等功能。
适用场景
数据展示(如成绩表、库存表)。
数据编辑(如员工信息管理、订单管理)。
动态数据加载(如数据库查询结果、CSV 文件数据)。
到此这篇关于Pyqt的QTableWidget组件的使用的文章就介绍到这了,更多相关Pyqt QTableWidget组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
