如何在 PyQT TableView 的 select 全部按钮中添加监听器?

How to add listener in PyQT TableView's select all button?

如何将侦听器附加到 PyQT 的 TableView 的 select 全部按钮?

PyQT TableView 示例

我试过使用下面的方法,只有当单元格被 selected 时才会触发。

table.clicked.connect()

我也尝试过向两个 header 添加侦听器,只有当列或行被 selected

时才会触发
table.horizontalHeader().sectionClicked.connect()
table.verticalHeader().sectionClicked.connect()

它们都按照预期的方式工作,但是我想将侦听器添加到左上角的按钮,即 select 全部按钮。我似乎无法从 Qt 的文档中找到提到按钮的这个特定部分的内容。

代码:

# Imported from Qt Designer created dialog
dialog = x.UI_Dialog()
table = dialog.tableSchedule
table.setModel(___) # I used my custom model that inherits from QtCore.QAbstractTableModel
table.clicked.connect(lambda: print('cell'))
table.horizontalHeader().sectionClicked.connect(lambda: print('col'))
table.verticalHeader().sectionClicked.connect(lambda: print('row'))

回答(来自@eyllanesc): 获取QTableView的角按钮并为其添加监听器。

corner = table.findChild(QAbstractButton)
corner.clicked.connect(___)

通过获取 QTableView 的 children 进一步检查,这些是组件:

角的那个元素是QAbstractButton,没有直接的方法获取它,一个可能的解决方案是使用findChild():

corner = table.findChild(QAbstractButton)

示例:

if __name__ == "__main__":
    app = QApplication(sys.argv)
    table = QTableView()
    corner = table.findChild(QAbstractButton)

    table.clicked.connect(lambda: print('cell'))
    table.horizontalHeader().sectionClicked.connect(lambda: print('col'))
    table.verticalHeader().sectionClicked.connect(lambda: print('row'))
    corner.clicked.connect(lambda: print('corner'))

    model = QStandardItemModel(3, 4, table)
    table.setModel(model)
    table.show()
    sys.exit(app.exec_())