2011-11-18 19 views
7

¿Es posible aplicar una hoja de estilo a la parte emergente de un QCompleter vinculado a un QCombobox? Si no, ¿requiere delegar magia? Si es así, ¿cómo podría funcionar eso, ya que tienden a confundir mi alma? Aquí está mi código del widget:Diseñar la ventana emergente de un QCompleter en PyQt

class autoFillField(QComboBox): 
    def __init__(self, parent=None): 
     super(autoFillField, self).__init__(parent) 

     self.setFocusPolicy(Qt.NoFocus) 
     self.setEditable(True) 

     self.addItem("") 

     self.pFilterModel = QSortFilterProxyModel(self) 
     self.pFilterModel.setFilterCaseSensitivity(Qt.CaseInsensitive) 
     self.pFilterModel.setSourceModel(self.model()) 

     self.completer = QCompleter(self.pFilterModel, self) 
     self.completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) 
     self.setCompleter(self.completer) 
     self.setStyleSheet(STYLING FOR COMBOBOX HERE, BUT NOT POPUP) 

     self.lineEdit().textEdited[unicode].connect(self.pFilterModel.setFilterFixedString) 

    def on_completer_activated(self, text): 
     if text: 
      index = self.findText(text) 
      self.setCurrentIndex(index) 

    def setModel(self, model): 
     super(autoFillField, self).setModel(model) 
     self.pFilterModel.setSourceModel(model) 
     self.completer.setModel(self.pFilterModel) 

    def setModelColumn(self, column): 
     self.completer.setCompletionColumn(column) 
     self.pFilterModel.setFilterKeyColumn(column) 
     super(autoFillField, self).setModelColumn(column) 

estaría el estilo emergente llevará a cabo en la clase de cuadro combinado, o pudiera ocurrir fuera de ella, donde se ingresan los datos a través de addItems? Gracias por adelantado.

Respuesta

14

Establezca la hoja de estilo del popup of the completer, que será un objeto QListView. Aquí hay un ejemplo ejecutable (el fondo de la ventana emergente debe ser amarillo):

#!/usr/bin/python 

import sys 
from PyQt4 import QtGui, QtCore 

app = QtGui.QApplication(sys.argv) 

w = QtGui.QComboBox() 
w.setEditable(True) 
c = QtGui.QCompleter(['Hello', 'World']) 
c.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion) 
c.popup().setStyleSheet("background-color: yellow") 
w.setCompleter(c) 
w.show() 

sys.exit(app.exec_()) 
+0

¡Perfecto! Casi me gustaría que no fuera tan simple como agarrar .popup(), pero no me quejaré. ¡Gracias Señor! – Cryptite

Cuestiones relacionadas