如何执行 QtWidgets.QTableWidget.setHorizontalHeader() 来保持默认行为?

问题描述 投票:0回答:1

pyqt5。常规表:

from PyQt5 import QtWidgets

app = QtWidgets.QApplication([])

table = QtWidgets.QTableWidget(3, 3)

table.setHorizontalHeaderLabels(['1', '2', '3'])

table.show()
app.exec_()

在这里,单击列标题可选择整个列。

如果我尝试显式传递 QtWidgets.QHeaderView,我会丢失一些默认行为,特别是单击标题不再选择该列:

from PyQt5 import QtWidgets, QtCore

class CustomTableWidget(QtWidgets.QTableWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setHorizontalHeader(QtWidgets.QHeaderView(QtCore.Qt.Horizontal))

app = QtWidgets.QApplication([])

table = CustomTableWidget(3, 3)
table.setHorizontalHeaderLabels(['1', '2', '3'])
table.show()

app.exec_()

我尝试为 QHeaderView 选择不同的父小部件,包括表格、子类化 QHeaderView 等。 无法实现默认行为。 (我显然不想显式地重新实现 scatch 中的默认值)

python qt pyqt5 qtablewidget
1个回答
0
投票

您有一个普通的表,当尝试对其进行子类化时,您会失去能够选择列的默认行为?

那是因为您添加了

self.setHorizontalHeader(QtWidgets.QHeaderView(QtCore.Qt.Horizontal))
行。 当您做出这样的声明时,它将覆盖任何内置的默认行为。 删除它将会得到您预期的结果。

from PyQt6 import QtWidgets, QtCore

class CustomTableWidget(QtWidgets.QTableWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # @SomebodyYoung Do not set a new horizontal header explicitly as it will just override the normal set behaviour

app = QtWidgets.QApplication([])
table = CustomTableWidget(3, 3)
table.setHorizontalHeaderLabels(['1', '2', '3'])
table.show()
app.exec()

我将 PyQT6 版本精简为最新版本,但您可以随意更改。 希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.