如何在PyQt中将QComboBox的文本设置为居中对齐而不使其可编辑

3

我发现做

self.combo.setEditable(True)
self.combo.lineEdit().setAlignment(QtCore.Qt.AlignCenter)

将会把组合框中的文本居中对齐。但是一旦这样做,我应用于组合框的样式就不起作用了,里面显示的文本将变为默认的纯文本。另外,我不想让它可编辑,也不喜欢设置为可编辑时出现的GUI效果。

有没有一种简单的方法来居中文本,并保留与之前相同的GUI效果(如点击时的样式和行为)?


我甚至尝试将组合框设置为只读。但是这并没有帮助。 - Natesh bhat
除了重新实现 paintEvent() 方法外,没有其他方法。 - bakatrouble
如果您能提供一个小的代码片段来实现加粗文本,那将非常有帮助……无论如何,我会查看文档。 - Natesh bhat
1个回答

2
您可以通过以下方式重新实现组合框绘制例程(摘自我正在处理的项目):

您可以通过以下方式自己重新实现组合框的绘制过程(摘自我正在处理的项目):

class CustomComboBox(QtGui.QComboBox):
    ...

    def paintEvent(self, evt):
        painter = QtGui.QStylePainter(self)
        painter.setPen(self.palette().color(QtGui.QPalette.Text))
        option = QtGui.QStyleOptionComboBox()
        self.initStyleOption(option)
        painter.drawComplexControl(QtGui.QStyle.CC_ComboBox, option)
        textRect = QtGui.qApp.style().subControlRect(QtGui.QStyle.CC_ComboBox, option, QtGui.QStyle.SC_ComboBoxEditField, self)
        painter.drawItemText(
            textRect.adjusted(*((2, 2, -1, 0) if self.isShown else (1, 0, -1, 0))),
            QtGui.qApp.style().visualAlignment(self.layoutDirection(), QtCore.Qt.AlignLeft),
            self.palette(), self.isEnabled(),
            self.fontMetrics().elidedText(self.currentText(), QtCore.Qt.ElideRight, textRect.width())
        )

   ...

painter.drawItemText 调用是绘制文本的地方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接