【问题标题】:How to add listener in PyQT TableView's select all button?如何在 PyQT TableView 的全选按钮中添加监听器?
【发布时间】:2018-06-26 05:43:32
【问题描述】:

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

PyQT TableView 示例

我尝试过使用下面的方法,只有在选择单元格时才会触发。

table.clicked.connect()

我还尝试向两个标题添加侦听器,只有在选择列或行时才会触发

table.horizontalHeader().sectionClicked.connect()
table.verticalHeader().sectionClicked.connect()

它们都在按预期工作,但是我想将侦听器添加到左上角的按钮,即全选按钮。我似乎无法从 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 的子项进一步检查,这些是组件:

  • 3 QWidget
  • QStyledItemDelegate
  • 2 QHeaderView
  • QAbstractButton
  • QItemSelectionModel

【问题讨论】:

  • 显示你的代码。
  • 我添加了我的代码,无论如何,我认为代码与问题无关,除了清除表变量是 QtWidgets.QTableView 的实例

标签: python pyqt pyqt4 pyqt5 qtableview


【解决方案1】:

角的那个元素是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_())

【讨论】:

    猜你喜欢
    • 2016-05-06
    • 1970-01-01
    • 2018-06-30
    • 2011-05-04
    • 2013-10-03
    • 2012-02-07
    • 1970-01-01
    • 2015-07-02
    • 2012-10-10
    相关资源
    最近更新 更多