PyQt5 tableWidget
时间: 2025-01-31 18:37:36 浏览: 44
### PyQt5中`QTableWidget`组件的使用方法
#### 创建并初始化`QTableWidget`
为了创建一个基本的 `QTableWidget` 组件,首先需要导入必要的模块,并设置好窗口布局。下面是一个简单的例子展示如何创建带有两列三行的表格[^1]。
```python
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 设置表格大小为2列3行
table_widget = QTableWidget(3, 2)
# 添加表头标签
table_widget.setHorizontalHeaderLabels(['姓名', '年龄'])
# 插入一些测试数据
items = [
['张三', '20'],
['李四', '22'],
['王五', '24']
]
for row_index, item in enumerate(items):
name_item = QTableWidgetItem(item[0])
age_item = QTableWidgetItem(item[1])
table_widget.setItem(row_index, 0, name_item)
table_widget.setItem(row_index, 1, age_item)
layout = QVBoxLayout()
layout.addWidget(table_widget)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())
```
此代码片段展示了如何定义一个具有固定行列数目的 `QTableWidget` 实例,并向其中填充具体的内容项。每一项都是通过 `QTableWidgetItem` 类实例化而来,代表了表格里的每一个单元格。
#### 处理点击事件与上下文菜单
当用户单击某个特定位置时触发自定义行为是非常常见的需求之一。可以通过重写鼠标释放事件来实现这一点,在该函数内部判断鼠标的坐标是否位于某一行内;如果是,则弹出右键菜单供进一步操作。
```python
def mouseReleaseEvent(self, event):
if event.button() == Qt.RightButton:
menu = QMenu(self)
action_delete_row = QAction('删除当前行')
action_add_row_above = QAction('在此之上添加新行')
selected_items = self.tableWidget.selectedItems()
if not selected_items:
return
clicked_row = selected_items[0].row()
action_delete_row.triggered.connect(lambda: self.deleteRow(clicked_row))
action_add_row_above.triggered.connect(lambda: self.addRowAbove(clicked_row))
menu.addAction(action_delete_row)
menu.addAction(action_add_row_above)
menu.popup(event.globalPos())
Example.mouseReleaseEvent = mouseReleaseEvent
```
上述代码实现了两个功能:一是删除选中的那一行记录;二是允许在现有条目上方新增一条空白记录。这里利用到了匿名函数 (`lambda`) 来传递额外参数给槽函数。
#### 响应组合框(`ComboBox`)的变化
如果希望让 `QTableWidget` 中嵌套的 `QComboBox` 控件能够正常工作——即改变选项后能被检测到变动并作出相应反馈的话,那么应该监听 `currentIndexChanged()` 信号而不是依赖于默认情况下不会更新的 `cellChanged` 信号[^3]。
```python
combo_box.currentIndexChanged.connect(
lambda index: print(f'选择了索引 {index}'))
```
这段脚本会打印出所选项目的索引值作为示范说明。实际应用当中可以根据业务逻辑执行更复杂的动作,比如保存更改后的状态至数据库等。
阅读全文
相关推荐


















