[PyQt] Using a QCompleter with a QLineEdit
Greg Smith
gsmith at troublemakerstudios.com
Wed Jun 24 15:34:07 BST 2009
Hey Everyone,
I'm trying to get a LineEdit I have in a tool I am writing to have the
ability to auto complete the user's entry based on what they have typed.
>From the sounds of it, QCompleter is exactly what I am after and they
work on QLineEdit widgets. However I am having difficulty getting it to
work, so I was wondering if I could share what I am trying to do and see
if I am doing anything wrong or not doing something that I should be in
order to get it to work.
So here's an abridged example of what I am doing.
------------------------------------------------------------------------
--------------------------------------------
>From PyQt4 import QtCore, QtGui, uic
defaultList = ['foo', 'bar', 'alpha', 'beta', 'ceti', 'delta']
completerList = QtCore.QStringList()
for i in defaultList:
completerList.append(QtCore.QString(i))
#defining my QDialog
class MyPyQtTool(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
self.ui = uic.loadUi ('C:\\myUiFile.ui')
lineEditCompleter = QtGui.QCompleter(completerList)
lineEditCompleter.setCompletionMode(QtGui.QCompleter.InlineCompletion)
lineEditCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
self.ui.myLineEdit_widget.setCompleter(lineEditCompleter)
#... defining other tool logic
# I also have the list being modified in another method based off of
user's selection.
def onMyComboBoxActivated(self)
# code here where a string list is created from a mysql db query
based on combo box selection.
for i in dbQryList:
completerList.append(QtCore.QString(i))
lineEditCompleter = QtGui.QCompleter(completerList)
lineEditCompleter.setCompletionMode(QtGui.QCompleter.InlineCompletion)
lineEditCompleter.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
self.ui.myLineEdit_widget.setCompleter(lineEditCompleter)
app = QtGui.QApplication(sys.argv)
dialog = MyPyQtTool()
dialog.ui.show()
app.exec_()
------------------------------------------------------------------------
-----------------------------------------------
This may not be the cleanest way of doing what I want but from the
example shown in the class reference web page, this should be sound.
However when I try to test it, I get no completion what so ever. No
errors are thrown so I am not exactly sure what I am doing wrong.
Is there another method that needs to be executed before it should work?
Any help would be truly appreciated!
Thanks,
Greg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20090624/1dc8b8e0/attachment.html
More information about the PyQt
mailing list