gpt4 book ai didi

python - 获取 QTableWidget 行的索引(了解其元素)

转载 作者:行者123 更新时间:2023-12-01 04:45:07 29 4
gpt4 key购买 nike

[我正在使用 PyQt4,但我认为这个 Qt4 问题不是 Python 特有的。]

我有一个QTableWidget。在每一行中,第一列都有一个按钮。单击时,该行将被删除。

要删除该行,我使用 removeRow(int row) 方法,该方法将行的索引作为参数。连接信号时,我无法知道该行的索引,因为它可能同时发生变化(例如,如果删除第一行,则所有行索引都会更改)。

The accepted answer here建议向回调传递行中 QTableWidgetItem 的实例,然后在删除时从该项目获取行号。

这很好,但该行的所有元素都不是 QTableWidgetItem。这些元素是按钮本身和一些组合框。

我想不出解决这个问题的方法。

我可以以某种方式将我的元素之一放入 QTableWidgetItem 中吗?我应该在某种隐藏列中添加 QTableWidgetItem 吗?

我们当前的实现使用 indexAt(QtGui.qApp.focusWidget()) (请参阅上述问题的其他答案),这对我来说似乎是一个令人遗憾的解决方法。

如果我用这样的可检查 QTableWidgetItem 替换按钮

rm_item = QtGui.QTableWidgetItem()
rm_item.setFlags(QtCore.Qt.ItemIsUserCheckable |
QtCore.Qt.ItemIsEnabled)

我有一个 QTableWidgetItem,可以用来返回行索引。但我不知道如何像使用按钮一样从中捕获“选中”或“单击”事件。我发现的只是 QTableWidgetitemClicked 信号,但随后我必须过滤掉所有其他小部件。

一定有一些明显的东西我错过了。

编辑

根据我读到的here ,我可以将带有 setItem 的 QTableWidgetItem 和带有 setCellWidget 的 Button 小部件添加到同一单元格。这对我来说似乎不太自然,但显然它有效(现在无法测试)。

我想我会这么做。添加按钮,并在同一单元格上添加一个虚拟 QTableWidgetItem 以作为对该行的引用传递。

事情本来就是这样吗?

编辑2

或者QTableWidget可能不是正确的Widget,我应该使用Layout,如建议的here .

最佳答案

似乎使用布局而不是表格可能是最“正确”的答案,但这可能会带来它自己的困难,正如我对此问题的回答所示:

如果您想继续使用表格,比添加虚拟项目更干净的解决方案是使用 persistent model index :

            button = QtGui.QPushButton(text, self.table)
self.table.setCellWidget(row, column, button)
index = QtCore.QPersistentModelIndex(
self.table.model().index(row, column))
button.clicked.connect(
lambda *args, index=index: self.handleButton(index))

def handleButton(self, index):
print('button clicked:', index.row())
if index.isValid():
self.table.removeRow(index.row())

关于python - 获取 QTableWidget 行的索引(了解其元素),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29633311/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com