如何在QTableView行单元格中检测按钮点击

3
我能够在 QtableView 的单元格中插入 PushButton
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QTableView, QPushButton, QAbstractItemView
from PyQt5.QtGui import QStandardItemModel, QStandardItem


app = QApplication(sys.argv)
app.setStyle("experiment")
tab = QTableView()
sti = QStandardItemModel()
for idx in range(0,3):
    sti.appendRow([QStandardItem(str(i)) for i in range(4)])
    tab.setModel(sti)
    tab.setEditTriggers(QAbstractItemView.NoEditTriggers)
    tab.setIndexWidget(sti.index(idx, 3), QPushButton("button"))
tab.show()
sys.exit(app.exec_())

我如何检测/识别哪个单元格按钮被按下?

非常感谢您的指导。

1个回答

1

您需要连接按钮的点击信号:

from functools import partial
import sys

from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QApplication, QTableView, QPushButton, QAbstractItemView


app = QApplication(sys.argv)
app.setStyle("experiment")
tab = QTableView()
tab.setEditTriggers(QAbstractItemView.NoEditTriggers)
sti = QStandardItemModel()
tab.setModel(sti)


def on_clicked(index):
    print("clicked", index)


for idx in range(0, 3):
    sti.appendRow([QStandardItem(str(i)) for i in range(4)])
    btn = QPushButton("button")
    btn.clicked.connect(partial(on_clicked, idx))
    tab.setIndexWidget(sti.index(idx, 3), btn)

tab.show()
sys.exit(app.exec_())

谢谢。对partial的使用很好,非常感谢。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接