如何更改ResizeMode
编号列QTableWidget
并设置ResizeToContents
?ResizeMode
普通立柱安装没有问题:
table.setSectionResizeMode(0, QtWidgets.QHeaderView.ResizeToContents)
但是你如何对自动编号的列做同样的事情呢?我在网上搜索了所有类似的问题,但没有找到答案。为什么需要这个?由于默认情况下,由于某种原因,编号会超出边缘:
这些都是两位数,而且越大,这种重叠就越大,以千计的形式出现,最后一位数字几乎是看不见的。我自己尝试做的事情:
1)我认为这将是解决方案:
table.verticalHeader().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
但是,此代码会根据内容垂直拉伸所有行。带编号的行不会水平拉伸。
2)尝试ResizeToContents
为所有列设置:
table.resizeSections(QtWidgets.QHeaderView.ResizeToContents)
我有单独配置的其他列,所以它们没有受到影响,但编号的列也没有受到影响。
3)如果它位于索引为 0 的标题之前,那么我认为值得尝试以下操作:
table.setSectionResizeMode(-1, QtWidgets.QHeaderView.ResizeToContents)
使用此代码,所有标题都被隐藏。
为什么会发生这种叠加,我该如何修复它或设置正确的标题设置以使这种叠加不会发生?
更新:
我弄清楚为什么编号中的数字不适合列:
setStyleSheet('QWidget { font-size: 16px; font-weight: 500; }')
在代码中创建界面时,我无法重现与使用 Qt Designer 时相同的样式。在代码中创建接口:
import sys
from PyQt5.QtWidgets import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('MainWindow')
self.setStyleSheet('QWidget { font-size: 16px; font-weight: 500; }')
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(2)
table = self.tableWidget
header = table.horizontalHeader()
header.setSectionResizeMode(0, QHeaderView.Stretch)
header.setSectionResizeMode(1, QHeaderView.Stretch)
for tw in range(0, 200):
row_position = table.rowCount()
table.insertRow(row_position)
table.setItem(row_position, 0, QTableWidgetItem(str(tw)))
table.setItem(row_position, 1, QTableWidgetItem(str(tw)))
self.layout = QVBoxLayout()
self.layout.addWidget(self.tableWidget)
self.setLayout(self.layout)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
sys.exit(app.exec_())
他的结果:
使用 .ui 文件的代码:
import sys
from PyQt5 import uic
from PyQt5.QtWidgets import *
class Window(QMainWindow):
def __init__(self):
super(Window, self).__init__()
uic.loadUi('main.ui', self)
table = self.tableWidget
header = table.horizontalHeader()
header.setSectionResizeMode(0, QHeaderView.Stretch)
header.setSectionResizeMode(1, QHeaderView.Stretch)
for tw in range(0, 200):
row_position = table.rowCount()
table.insertRow(row_position)
table.setItem(row_position, 0, QTableWidgetItem(str(tw)))
table.setItem(row_position, 1, QTableWidgetItem(str(tw)))
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Window()
w.show()
sys.exit(app.exec_())
结果:
主界面:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1079, 600)
MainWindow.setStyleSheet("QWidget {\n"
" font-size: 16px;\n"
" font-weight: 500;\n"
"}")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setStyleSheet("")
self.tableWidget.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents)
self.tableWidget.setAutoScroll(True)
self.tableWidget.setShowGrid(True)
self.tableWidget.setGridStyle(QtCore.Qt.SolidLine)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(2)
self.tableWidget.setRowCount(0)
item = QtWidgets.QTableWidgetItem()
self.tableWidget.setHorizontalHeaderItem(0, item)
item = QtWidgets.QTableWidgetItem()
item.setTextAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignVCenter)
self.tableWidget.setHorizontalHeaderItem(1, item)
self.tableWidget.verticalHeader().setCascadingSectionResizes(True)
self.tableWidget.verticalHeader().setStretchLastSection(True)
self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
item = self.tableWidget.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "First"))
item = self.tableWidget.horizontalHeaderItem(1)
item.setText(_translate("MainWindow", "Second"))
我没有查看您在代码中创建接口的第一个示例。
至于使用
.ui
文件的代码:查看您发布的工作结果的图像,在我看来,表格使用了不同的字体。通过添加一些像素
.....................vv <--------------------- --------- -------------
"字体大小:72px;\n"
"字体粗细:500;\n"
所以是的,这是结果(至少对我来说):
添加到样式表
font-family
:好的,我的问题解决了:
为什么这会发生在您的两个具有相同样式的变体中?
我没有足够的知识(目前)来解释在 Qt 中为特定小部件使用样式表的复杂性,所以我在陈述一个事实。
主文件
我没有要测试的可重现示例,因此只需尝试将verticalHeader()更改为HorizontalHeader():
或拉伸到全长: