2017-07-11 2 views
2

Ich habe denWie der Text in der QComboBox bis auf die Mitte auszurichten, ohne sie editierbar in PyQt zu machen

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

wird richten Sie den Text in der Combobox zum Zentrum zu tun gefunden. Aber sobald ich das tue, funktioniert das Styling, das ich auf die Combobox angewendet habe, nicht und der Text, der darin zeigt, wird der Standardklartext. Außerdem möchte ich es nicht editierbar machen und ich mag den GUI-Effekt nicht, der auftritt, wenn wir ihn auf editierbar setzen.

Gibt es eine einfache Möglichkeit, den Text zentriert auszurichten und dennoch dieselben GUI-Effekte wie zuvor beizubehalten (wie Stil und Verhalten beim Klicken darauf)?

+0

Ich habe sogar versucht, die Combobox nur lesen zu setzen. Aber das hilft nicht –

+0

Es gibt keine andere Möglichkeit, als 'paintEvent() 'Methode – bakatrouble

+0

Reimplementierung es wäre sehr hilfreich von Ihnen, wenn Sie ein kleines Code-Snippet, um etwas wie einen fetten Text mit dieser Methode zu tun ... sowieso ich wird in die Dokumente schauen –

Antwort

2

Sie können (ich arbeite Ausschnitt aus Projekt) Combobox Zeichnung Routine selbst auf diese Weise neu implementieren:

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 Anruf ist, wo Text gezogen wird.

Verwandte Themen