【问题标题】:How to select a QTableWidget cell containing a button如何选择包含按钮的 QTableWidget 单元格
【发布时间】:2022-01-10 10:09:28
【问题描述】:

我有一个关于 PyQt4 的 QTableWidget 的问题。假设我有一个 QTableWidget,我想让一个事件连接到一个单元格点击使用:

table.cellClicked.connect(cellClick)

然后,cellClick 函数完成了它的工作。问题是:一些单元格包含一个按钮,就像这样(坐标 0,0 为例):

button = QtGui.QPushButton()
table.setCellWidget(0,0, button)

现在我的问题来了。单元格中按钮的存在(占用整个单元格空间)完全禁用 cellClicked - 单元格没有被点击,无法检测到操作。但我确实希望我的按钮填充单元格。

所以,简而言之,我的问题是 - 当 QTableWidget 单元格中有一个按钮时,如何选择(单击)它?

【问题讨论】:

    标签: python pyqt signals-slots qtablewidget


    【解决方案1】:

    简单的答案似乎是:

        button.clicked.connect(cellClick)
    

    但是你怎么知道被点击的单元格的行/列呢?所以下一次迭代可能是:

        button = QPushButton()
        table.setCellWidget(row, column, button)
        button.clicked.connect(
            lambda *args, row=row, column=column: cellClick(row, column))
    

    如果表是静态的,那也没关系。但是如果行和列可以重新排列呢?在这种情况下,缓存在按钮的clicked 处理程序中的行/列可能会失效。所以下一次迭代可能是:

       index = QtCore.QPersistentModelIndex(table.model().index(row, column))
       button.clicked.connect(
            lambda *args, index=index: cellClick(index.row(), index.column()))
    

    (注意:您可以将其他插槽连接到按钮的clicked 信号,但它们将被调用的顺序未定义)

    【讨论】:

    • 很好的答案,涵盖了主题的所有范围。感谢您的时间和精力。
    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 2019-02-08
    相关资源
    最近更新 更多