On Tue, 17 Sep 2013 08:42:35 +0430, Mohsen Pahlevanzadeh wrote: > Dear all, > > Unfortunately, i confused and need help... the following code is: > ################################################### > ##CheckBox: > QtCore.QObject.connect(self.checkBox, > QtCore.SIGNAL(_fromUtf8("toggled(bool)")), lambda: > self.materialsInstance.setFilterDict("C", self, "name", > self.lineEdit.text()))
I don't use Qt, but I'll try to help. First question, what does _fromUtf8 do? It appears to be a private function. Is that your function? If you want to create a string from UTF-8 bytes, use: some_bytes.decode('utf-8') I don't think there is a need for a dedicated _fromUtf8 function. If you are using Python 3, then "toggled(bool)" is already a Unicode string, and there is no need to convert from UTF-8. If you are using Python 2, then "toggled(bool)" is a byte string, and you can turn it into a Unicode string by just using the u prefix: u"toggled(bool)" Again, no need to convert from UTF-8. The only time you need to convert from UTF-8 is when you are reading data from a file, or other external source, that is encoded in UTF-8. Other than that, your first line of code seems like a straight-forward call to set a callback function. When the button is pressed, the instance's attribute materialsInstance calls the method setFilterDict. > QtCore.QObject.connect(self.checkBox_2, > QtCore.SIGNAL(_fromUtf8("toggled(bool)")), lambda: > self.materialsInstance.setFilterDict("C", self, "bought_price", > persianToInteger(unicode(self.lineEdit_2.text())))) Again, the same method is called, only this time with different arguments. Hmmm, this strikes me as poor design. I think that a better design would be for the object to have a few methods: def toggle_checkbox(self, flag): # checkbox logic goes here, e.g. if flag: ... else: ... And then your callback is trivially lambda: self.toggle_checkbox(get_state) I'm not sure how to get the checkbox state from Qt, you will need to replace the "get_state" with the correct code. That, in my opinion, is easier to understand. > QtCore.QObject.connect(self.checkBox_4, > QtCore.SIGNAL(_fromUtf8("toggled(bool)")), lambda: > self.materialsInstance.setFilterDict("C",self,"stock", > persianToInteger(unicode(self.lineEdit_3.text())))) And more callbacks. Most of your code is probably irrelevant to the problem you are having. You will help us to help you if you can read this website: http://sscce.org/ and simplify your code. [...many more callbacks...] > #################################################### > Description: > I have 3 widget: > 1. CheckBox: a. name b. bought_price c. stock 2. LineEdit : a. name b. > bought_price c. stock 3. One PushButton > > i have three slot: 1. responseToRequestForData() 2.setFilterDict() > 3.unSetFilterDict() > responseToRequestForData(): start to search in DB setFilterDict(): fill > a dict from my LineEdit > > Problem: > My name is filled in dict but its value doesn't fill up. b and c don't > have any problem. I'm afraid I don't understand this. Even your followup post doesn't really help: > I see same output in console: > {'stock': 2, 'name': PyQt4.QtCore.QString(u''), 'bought_price': 23} What result where you expecting? If I remember correctly, Qt strings are mutable unicode strings, so 'name' is associated with an empty Qt string. If they are mutable, that means that once the dict is set: {'name': QString(u'contents of text field'), ...} if the text field changes, so will the string. Is that what is happening? (Or perhaps I have mis-remembered about Qt strings.) You have two callbacks that appear to set the "name" key in the dict. Perhaps one of them is setting it to an empty value. -- Steven -- https://mail.python.org/mailman/listinfo/python-list