如何在 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 进一步检查,这些是组件:
- 3 个 QWidget
- QStyledItemDelegate
- 2 QHeaderView
- QAbstractButton
- QItemSelectionModel
角的那个元素是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_())
如何将侦听器附加到 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 进一步检查,这些是组件:
- 3 个 QWidget
- QStyledItemDelegate
- 2 QHeaderView
- QAbstractButton
- QItemSelectionModel
角的那个元素是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_())