Hi Ben, Thank you so much now it is working.
On Thu, Sep 22, 2011 at 9:35 PM, Ben Breslauer <bbresla...@gmail.com> wrote: > Honestly, since I don't use the old-style syntax, I'm not sure. However, > using the new-style signals, I think the following does what you want. > > > class LineEditCompleter(QtGui.QLineEdit): > #create custom signal > signalTextChanged=QtCore.Signal(list,str) > def __init__(self,parent=None): > QtGui.QLineEdit.__init__(self,parent) > self.textChanged.connect(self.text_changed) > > > def text_changed(self,text): > print "from text_changed:",text > allText=unicode(text) > prefix=allText.split(",")[-1].strip() > > names=list() > for name in allText.split(","): > name=unicode(name).strip() > if name!="": > names.append(str(name)) > > self.signalTextChanged.emit(names, prefix) > > > def complete_name(self,text): > cursor_pos=self.cursorPosition() > before_text=unicode(self.text())[:cursor_pos] > after_text=unicode(self.text())[cursor_pos:] > prefix_len=len(before_text.split(",")[-1].strip()) > self.setText("%s%s, > %s"%(before_text[:cursor_pos-prefix_len],text,after_text)) > self.setCursorPosition(cursor_pos-prefix_len+len(text)+2) > > class NameCompleter(QtGui.QCompleter): > def __init__(self,names=list(),parent=None): > QtGui.QCompleter.__init__(self,names,parent) > self.names=names > > def updateNames(self,names,completion_prefix): > print "from updateNames:",names,completion_prefix > _names=list() > for name in names: > if not self.names.__contains__(name): > _names.append(name) > > model=QtGui.QStringListModel(_names,self) > self.setModel(model) > > self.setCompletionPrefix(completion_prefix) > if completion_prefix.strip() !="": > self.complete() > > > def main(): > app=QtGui.QApplication(sys.argv) > nameEditor=LineEditCompleter() > names=list() > names.append("ABC") > names.append("DEF") > names.append("AAAA") > completer=NameCompleter(names) > completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) > nameEditor.signalTextChanged.connect(completer.updateNames) > completer.activated.connect(nameEditor.complete_name) > > completer.setWidget(nameEditor) > nameEditor.show() > sys.exit(app.exec_()) > > if __name__=="__main__": > main() > > > On Thu, Sep 22, 2011 at 8:51 PM, Ravi ..........! <hi5frei...@gmail.com>wrote: > >> Hi Ben, >> I have modified the signal emit statement like you said. even >> though it is still not firing /calling "updateNames" slot in NameCompleter >> . What i have to do now? please suggest me. >> >> >> self.emit(QtCore.SIGNAL("signalTextChanged"),names,prefix) >> >> >> QtCore.QObject.connect(nameEditor,QtCore.SIGNAL("signalTextChanged(list,str)"),completer.updateNames) >> >> thank you. >> >> >> On Thu, Sep 22, 2011 at 6:36 PM, Ben Breslauer <bbresla...@gmail.com>wrote: >> >>> When calling emit, you don't specify the signature. So in >>> LineEditCompleter.text_changed, you should call >>> >>> self.emit(QtCore.SIGNAL("signalTextChanged"),names,prefix) >>> >>> In addition, when using old-style signals, you don't need to explicitly >>> define the signal using QtCore.Signal, Because when you call QObject.emit >>> (or here, self.emit), it creates the signal dynamically. >>> >>> Hope that helps! >>> >>> Ben >>> >>> On Thu, Sep 22, 2011 at 6:47 PM, Ravi ..........! >>> <hi5frei...@gmail.com>wrote: >>> >>>> Hi, >>>> even after changing the name of the Signal still i'm getting error. >>>> >>>> *" >>>> self.emit(QtCore.SIGNAL("signalTextChanged(list,str)"),names,prefix) >>>> TypeError: Unknown type used to emit a signal: list"* >>>> >>>> class LineEditCompleter(QtGui.QLineEdit): >>>> #create custom signal >>>> signalTextChanged=QtCore.Signal(list,str) >>>> def __init__(self,parent=None): >>>> QtGui.QLineEdit.__init__(self,parent) >>>> >>>> self.connect(self,QtCore.SIGNAL("textChanged(QString)"),self.text_changed) >>>> >>>> def text_changed(self,text): >>>> print "from text_changed:",text >>>> allText=unicode(text) >>>> prefix=allText.split(",")[-1].strip() >>>> >>>> names=list() >>>> for name in allText.split(","): >>>> name=unicode(name).strip() >>>> if name!="": >>>> names.append(str(name)) >>>> >>>> >>>> self.emit(QtCore.SIGNAL("signalTextChanged(list,str)"),names,prefix) >>>> >>>> def complete_name(self,text): >>>> cursor_pos=self.cursorPosition() >>>> before_text=unicode(self.text())[:cursor_pos] >>>> after_text=unicode(self.text())[cursor_pos:] >>>> prefix_len=len(before_text.split(",")[-1].strip()) >>>> self.setText("%s%s, >>>> %s"%(before_text[:cursor_pos-prefix_len],text,after_text)) >>>> self.setCursorPosition(cursor_pos-prefix_len+len(text)+2) >>>> >>>> class NameCompleter(QtGui.QCompleter): >>>> def __init__(self,names=list(),parent=None): >>>> QtGui.QCompleter.__init__(self,names,parent) >>>> self.names=names >>>> >>>> def updateNames(self,names,completion_prefix): >>>> print "from updateNames:",names,completion_prefix >>>> _names=list() >>>> for name in names: >>>> if not self.names.__contains__(name): >>>> _names.append(name) >>>> >>>> model=QtGui.QStringListModel(_names,self) >>>> self.setModel(model) >>>> >>>> self.setCompletionPrefix(completion_prefix) >>>> if completion_prefix.strip() !="": >>>> self.complete() >>>> >>>> >>>> def main(): >>>> app=QtGui.QApplication(sys.argv) >>>> nameEditor=LineEditCompleter() >>>> names=list() >>>> names.append("ABC") >>>> names.append("DEF") >>>> names.append("AAAA") >>>> completer=NameCompleter(names) >>>> completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive) >>>> >>>> QtCore.QObject.connect(nameEditor,QtCore.SIGNAL("signalTextChanged(list,str)"),completer.updateNames) >>>> >>>> QtCore.QObject.connect(completer,QtCore.SIGNAL("activated(QString)"),nameEditor.complete_name) >>>> completer.setWidget(nameEditor) >>>> nameEditor.show() >>>> sys.exit(app.exec_()) >>>> >>>> if __name__=="__main__": >>>> main() >>>> >>>> _______________________________________________ >>>> PySide mailing list >>>> PySide@lists.pyside.org >>>> http://lists.pyside.org/listinfo/pyside >>>> >>>> >>> >> >> _______________________________________________ >> PySide mailing list >> PySide@lists.pyside.org >> http://lists.pyside.org/listinfo/pyside >> >> >
_______________________________________________ PySide mailing list PySide@lists.pyside.org http://lists.pyside.org/listinfo/pyside