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

Reply via email to