代码之家  ›  专栏  ›  技术社区  ›  Natesh bhat

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

  •  3
  • Natesh bhat  · 技术社区  · 7 年前

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

    将组合框中的文本对齐到中心。但一旦我这么做了,我应用到组合框的样式就不起作用,其中显示的文本将是默认的纯文本。此外,我不想使其可编辑,我不喜欢当我们将其设置为可编辑时出现的GUI效果。

    1 回复  |  直到 7 年前
        1
  •  2
  •   bakatrouble    7 年前

    您可以通过这种方式自己重新实现组合框绘图例程(来自我正在处理的项目的代码片段):

    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 调用是绘制文本的位置。