pyqt 在表格中插入按钮
在 QStandardItemModel 中插入按钮可以通过使用 setIndexWidget() 方法实现。该方法可以在指定的 QModelIndex 上设置一个小部件,并在该位置显示该小部件。可以使用 model.index() 方法获取特定单元格的 QModelIndex,然后使用 setIndexWidget() 方法在该位置添加按钮。
以下是一个示例代码片段,演示如何在 QStandardItemModel 中插入按钮:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class MainWindow(QWidget):
def __init__(self):
super().__init__()
# 创建 QStandardItemModel 并填充数据
self.model = QStandardItemModel()
self.model.setHorizontalHeaderLabels(['Name', 'Age', 'Button'])
for row in range(3):
for column in range(3):
item = QStandardItem(str(row * 3 + column + 1))
self.model.setItem(row, column, item)
# 创建表格视图
self.tableView = QTableView()
self.tableView.setModel(self.model)
# 在最后一列插入按钮
for row in range(3):
btn = QPushButton('Button')
btn.setProperty('row', row)
btn.setProperty('column', 2)
btn.clicked.connect(self.on_button_clicked)
index = self.model.index(row, 2, QModelIndex())
self.tableView.setIndexWidget(index, btn)
# 将表格视图添加到窗口中
layout = QHBoxLayout(self)
layout.addWidget(self.tableView)
self.setLayout(layout)
def on_button_clicked(self):
sender = self.sender()
row = sender.property('row')
column = sender.property('column')
index = self.model.index(row, column, QModelIndex())
print(f'Button clicked at row {row}, column {column}, value is {self.model.data(index, Qt.DisplayRole)}')
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在此示例中,我们创建了一个 QStandardItemModel 对象并在其中填充了一些数据。我们在表格的最后一列中插入了按钮,使用 setIndexWidget() 方法设置按钮小部件。在按钮的 clicked 信号中,我们获取了按钮的行、列和模型索引,并打印了相应单元格的值。