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 中的默认值)
您有一个普通的表,当尝试对其进行子类化时,您会失去能够选择列的默认行为?
那是因为您添加了
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 版本精简为最新版本,但您可以随意更改。 希望有帮助。