我想在左侧的QTableWidget
中对齐文本,但我还想添加缩进以使文本不会粘在边框上。在图像上,col_2
是我想要的。我希望标题标签也一样。
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QTableWidgetItem
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(400, 300)
self.gridLayout = QtWidgets.QGridLayout(Form)
self.gridLayout.setObjectName("gridLayout")
self.tableWidget = QtWidgets.QTableWidget(Form)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(0)
self.tableWidget.setRowCount(0)
self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
self.tableWidget.setRowCount(0)
self.tableWidget.setColumnCount(2)
entries = ['aa','bb','cc','dd','ee']
for row, form in enumerate(entries):
self.tableWidget.insertRow(row)
for column, item in enumerate(form):
self.tableWidget.setItem(row, column, QTableWidgetItem(str(item)))
self.tableWidget.setHorizontalHeaderLabels(['col_1', 'col_2'])
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
答案 0 :(得分:1)
对于缩进,QSS Reference表示应该可以使用QTableWidget::item和QHeaderView::section选择器:
self.tableWidget.setStyleSheet("""
QTableWidget::item {padding-left: 5px; border: 0px}
""")
self.tableWidget.horizontalHeader().setStyleSheet("""
QHeaderView::section {padding-left: 5px; border: 0px}
""")
然而,我尝试了填充,边距和边框设置的所有各种组合,并发现它们要么根本不起作用,要么具有奇怪和丑陋的副作用。在SO和其他地方查看了几个类似的问题之后,这些样式表设置的确切行为似乎取决于您所使用的平台和/或您正在使用的小部件样式。希望他们能为你工作,但如果你发现一些小问题,不要感到惊讶。
如果样式表解决方案无效,大多数人都会使用自定义项目委托。这通常涉及重新实现paint方法。但是,另一种方法是重新实现displayText方法并用空格填充返回的文本。这根本不会影响基础数据,并以更简单的方式提供完全相同的结果。重新实现createEditor方法也非常简单,以便在编辑单元格时调整左边距。完整的自定义项目委托将如下所示:
class PaddingDelegate(QtWidgets.QStyledItemDelegate):
def __init__(self, padding=1, parent=None):
super(PaddingDelegate, self).__init__(parent)
self._padding = ' ' * max(1, padding)
def displayText(self, text, locale):
return self._padding + text
def createEditor(self, parent, option, index):
editor = super().createEditor(parent, option, index)
margins = editor.textMargins()
padding = editor.fontMetrics().width(self._padding) + 1
margins.setLeft(margins.left() + padding)
editor.setTextMargins(margins)
return editor
它可以像这样使用:
self.delegate = PaddingDelegate()
self.tableWidget.setItemDelegate(self.delegate)
拼图的最后一部分是标题项的缩进。为此,在标签文本中添加一些空格似乎最简单:
self.tableWidget.setHorizontalHeaderLabels([' col_1', ' col_2'])
标题标签的对齐方式可以这样设置:
self.tableWidget.horizontalHeader().setDefaultAlignment(
QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)