2011-11-18 12 views
7

Czy można zastosować arkusz stylów do wyskakującego elementu QCompleter przywiązanego do QCombobox? Jeśli nie, czy wymaga magii delegatów? Jeśli tak, to jak to może zadziałać, jak oni, mają tendencję do mylenia mnie ze sobą. Oto mój kod widżet:Stylizacja okna wyskakującego z QCompleter w 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) 

Czy stylizacji popup odbywać się w klasie combobox lub mogłoby się zdarzyć, poza nią, gdzie dane są wprowadzane poprzez addItems? Z góry dziękuję.

Odpowiedz

14

Ustaw arkusz stylów dla popup of the completer, który będzie obiektem QListView. Oto działający przykład (tło wyskakującego okienka powinno być żółte):

#!/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

Idealnie! Niemal żałuję, że nie jest to tak proste, jak chwytanie .popup(), ale nie będę narzekać. Dziękuję Panu! – Cryptite

Powiązane problemy