[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: [PyQt] QCompleter in a QLineEdit
From: "C. B. Esquire" <crackerbunny () gmail ! com>
Date: 2011-04-27 6:29:48
Message-ID: BANLkTimLYebgEYZDve4BrPBAL64uhFPLww () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
(let me know if the space/tab formatting didn't come through and I'll attach
the python script instead)
I'm trying to create a QCompleter, which works fine if I just build the
QLineEdit.
However if I drop the QLineEdit into a QMainWindow, the QCompleter no longer
works. What am I doing wrong here?
*# LineEdit class*
import sys
from PyQt4 import QtCore, QtGui
class LineEdit(QtGui.QLineEdit):
def __init__(self, parent=None):
super(LineEdit, self).__init__(parent)
self.setFocusPolicy(QtCore.Qt.StrongFocus)
self.completer = QtGui.QCompleter(self)
self.completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion)
self.pFilterModel = QtGui.QSortFilterProxyModel(self)
self.pFilterModel.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)
self.completer.setPopup(self.view())
self.setCompleter(self.completer)
self.textEdited[unicode].connect(self.pFilterModel.setFilterFixedString)
self.setModelColumn(0)
def setModel(self, model):
self.pFilterModel.setSourceModel(model)
self.completer.setModel(self.pFilterModel)
def setModelColumn( self, column ):
self.completer.setCompletionColumn(column)
self.pFilterModel.setFilterKeyColumn(column)
def view(self):
return self.completer.popup()
def index( self ):
return self.currentIndex()
*# Instance 1: This works just fine*
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
model = QtGui.QStandardItemModel()
for i,word in enumerate(['test', 'blah', 'heh', 'yep']):
item = QtGui.QStandardItem(word)
model.setItem(i, 0, item)
lineEdit = LineEdit()
lineEdit.setModel(model)
lineEdit.setModelColumn(0)
lineEdit.show()
sys.exit(app.exec_())
*
**# Instance 2: Building** the LineEdit inside a QMainWindow the QCompleter
doesn't work any more ~*
if __name__ == '__main__':
class Example(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.centralWidget = QtGui.QWidget(self)
self.layout = QtGui.QVBoxLayout(self.centralWidget)
# can I push this inside the LineEdit class instead?
model = QtGui.QStandardItemModel()
for i, word in enumerate(['test', 'blah', 'heh', 'yep', 'hello',
'hi']):
item = QtGui.QStandardItem(word)
model.setItem(i, 0, item)
# Make a LineEdit instance
self.lineEdit = LineEdit(parent=self.centralWidget)
self.lineEdit.setModel(model)
self.layout.addWidget(self.lineEdit)
self.setCentralWidget(self.centralWidget)
app = QtGui.QApplication(sys.argv)
QtWin = Example()
QtWin.show()
sys.exit(app.exec_())
*
### Also a side question, is there a way to put the model code inside the
LineEdit class? When I put the model logic inside, it also seems to quietly
stop working.*
model = QtGui.QStandardItemModel()
for i, word in enumerate(['test', 'blah', 'heh', 'yep', 'hello',
'hi']):
item = QtGui.QStandardItem(word)
model.setItem(i, 0, item)
# Make a LineEdit instance
self.lineEdit = LineEdit(parent=self.centralWidget)
self.lineEdit.setModel(model)
[Attachment #5 (text/html)]
(let me know if the space/tab formatting didn't come through and I'll attach \
the python script instead)<br><br>I'm trying to create a QCompleter, which works \
fine if I just build the QLineEdit. <br>However if I drop the QLineEdit into a \
QMainWindow, the QCompleter no longer works. What am I doing wrong here?<br> \
<br><br><b># LineEdit class</b><br>import sys<br>from PyQt4 import QtCore, \
QtGui<br><br>class LineEdit(QtGui.QLineEdit):<br> def __init__(self, \
parent=None):<br> super(LineEdit, self).__init__(parent)<br> <br> \
self.setFocusPolicy(QtCore.Qt.StrongFocus)<br> <br> self.completer = \
QtGui.QCompleter(self)<br> \
self.completer.setCompletionMode(QtGui.QCompleter.UnfilteredPopupCompletion)<br> \
self.pFilterModel = QtGui.QSortFilterProxyModel(self)<br> \
self.pFilterModel.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)<br> \
self.completer.setPopup(self.view())<br> self.setCompleter(self.completer)<br> \
self.textEdited[unicode].connect(self.pFilterModel.setFilterFixedString)<br> <br> \
self.setModelColumn(0)<br> <br> def setModel(self, model):<br> \
self.pFilterModel.setSourceModel(model)<br> \
self.completer.setModel(self.pFilterModel)<br> <br> def setModelColumn( \
self, column ):<br> self.completer.setCompletionColumn(column)<br> \
self.pFilterModel.setFilterKeyColumn(column)<br> <br> def \
view(self):<br> return self.completer.popup()<br> <br> def \
index( self ):<br> return self.currentIndex()<br> <br><b># Instance 1: This \
works just fine</b><br>if __name__ == "__main__":<br> app = \
QtGui.QApplication(sys.argv)<br> <br> model = QtGui.QStandardItemModel()<br> \
<br> for i,word in enumerate(['test', 'blah', 'heh', \
'yep']):<br> item = QtGui.QStandardItem(word)<br> \
model.setItem(i, 0, item)<br> <br> lineEdit = LineEdit()<br> \
lineEdit.setModel(model)<br> lineEdit.setModelColumn(0)<br> lineEdit.show()<br> \
sys.exit(app.exec_())<br><b><br></b><b># Instance 2: Building</b><b> the LineEdit \
inside a QMainWindow the QCompleter doesn't work any more ~</b><br> if __name__ \
== '__main__':<br> class Example(QtGui.QMainWindow):<br> def \
__init__(self):<br> QtGui.QMainWindow.__init__(self)<br> <br> \
self.centralWidget = QtGui.QWidget(self)<br> self.layout = \
QtGui.QVBoxLayout(self.centralWidget)<br> <br> # can I push \
this inside the LineEdit class instead?<br> model = \
QtGui.QStandardItemModel()<br> for i, word in enumerate(['test', \
'blah', 'heh', 'yep', 'hello', 'hi']):<br> \
item = QtGui.QStandardItem(word)<br> model.setItem(i, 0, item)<br> \
<br> # Make a LineEdit instance<br> self.lineEdit = \
LineEdit(parent=self.centralWidget)<br> self.lineEdit.setModel(model)<br> \
<br> self.layout.addWidget(self.lineEdit)<br> \
self.setCentralWidget(self.centralWidget)<br> <br> <br> app \
= QtGui.QApplication(sys.argv)<br> QtWin = Example()<br> QtWin.show()<br> \
sys.exit(app.exec_())<br><br><br><br><br><br><br><i><b><br>### Also a side question, \
is there a way to put the model code inside the LineEdit class? When I put the model \
logic inside, it also seems to quietly stop working.</b></i><br> <br> \
model = QtGui.QStandardItemModel()<br> for i, word in \
enumerate(['test', 'blah', 'heh', 'yep', \
'hello', 'hi']):<br> item = \
QtGui.QStandardItem(word)<br> model.setItem(i, 0, item)<br> <br> \
# Make a LineEdit instance<br> self.lineEdit = \
LineEdit(parent=self.centralWidget)<br> self.lineEdit.setModel(model)<br>
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic