Re: Qt connect and first connect or unicode

2013-09-17 Thread Oscar Benjamin
On 17 September 2013 05:12, Mohsen Pahlevanzadeh
moh...@pahlevanzadeh.org 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()))

 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()

 QtCore.QObject.connect(self.checkBox_4,
 QtCore.SIGNAL(_fromUtf8(toggled(bool))), lambda:
 self.materialsInstance.setFilterDict(C,self,stock,persianToInteger(unicode(self.lineEdit_3.text()

 ##LineEdit
 QtCore.QObject.connect(self.lineEdit,
 QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
 self.materialsInstance.setFilterDict(L,self,name,self.lineEdit.text()))

 QtCore.QObject.connect(self.lineEdit_2,
 QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
 self.materialsInstance.setFilterDict(L,self,bought_price,persianToInteger(unicode(self.lineEdit_2.text()

I don't really know what the problem you're having is but this code is
very difficult to read.

What's the point of the _fromUTF8 function? The strings you pass it
are all ASCII, so if you're trying to create unicode strings you could
just use the u prefix e.g. utoggled(bool).

Also you can avoid referring to the same deeply nested attributes by
importing them or assigning them to something first e.g.:

from QtCore import SIGNAL
from QtCore.QObject import connect  # Not sure if QObject is a module...


## Checkbox:
setfilter = self.materialsInstance.setFilterDict

connect(self.checkBox, SIGNAL(utoggled(bool)),
lambda: setfilter(C, self, name, self.lineEdit.text()))


Oscar
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Qt connect and first connect or unicode

2013-09-17 Thread Steven D'Aprano
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:

utoggled(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


Re: Qt connect and first connect or unicode

2013-09-17 Thread Vincent Vande Vyvre

Le 17/09/2013 11:05, Steven D'Aprano a écrit :

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:

utoggled(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.






_fromUtf8 is needed for the API compatibility, at the beginning of the code of 
Moshen it is these lines:

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s


Moshen, I thing if you pass the instance of your GUI at the class 
materialsInstance you'll can simplify your connections

self.lineEdit.returnPressed.connect(self.materialsInstance.responseToRequestForData)
self.lineEdit.editingFinnished.connect(self.materialsInstance.responseToRequestForData)

For the checkBoxes, I'm not sure you need all these arguments but I don't know 
enough your code.


--
Vincent V.V.
Oqapy https://launchpad.net/oqapy . Qarte 
https://launchpad.net/qarte . PaQager https://launchpad.net/paqager

--
https://mail.python.org/mailman/listinfo/python-list


Re: Qt connect and first connect or unicode

2013-09-17 Thread Mohsen Pahlevanzadeh
On Tue, 2013-09-17 at 12:32 +0200, Vincent Vande Vyvre wrote:
 Le 17/09/2013 11:05, Steven D'Aprano a écrit :
  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:
 
  utoggled(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.
 
 
 
 
 
 _fromUtf8 is needed for the API compatibility, at the beginning of the code 
 of Moshen it is these lines:
 
 try:
  _fromUtf8 = QtCore.QString.fromUtf8
 except AttributeError:
  _fromUtf8 = lambda s: s
 
 
 Moshen, I thing if you pass the instance of your GUI at the class 
 materialsInstance you'll can simplify your connections
 
 self.lineEdit.returnPressed.connect(self.materialsInstance.responseToRequestForData)
 self.lineEdit.editingFinnished.connect(self.materialsInstance.responseToRequestForData)
 
 For the checkBoxes, I'm not sure you need all these arguments but I don't 
 know enough your code.
 
 
 -- 
 Vincent V.V.
 Oqapy https://launchpad.net/oqapy . Qarte 
 https://launchpad.net/qarte . PaQager https://launchpad.net/paqager
i solved, I didn't think Qt hard up.i change priority of connect in my
script and every thing was OK. o day of hard codeThanks GOD.

-- 
https://mail.python.org/mailman/listinfo/python-list


Qt connect and first connect or unicode

2013-09-16 Thread Mohsen Pahlevanzadeh
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()))

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()

QtCore.QObject.connect(self.checkBox_4,
QtCore.SIGNAL(_fromUtf8(toggled(bool))), lambda:
self.materialsInstance.setFilterDict(C,self,stock,persianToInteger(unicode(self.lineEdit_3.text()

##LineEdit
QtCore.QObject.connect(self.lineEdit,
QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
self.materialsInstance.setFilterDict(L,self,name,self.lineEdit.text()))

QtCore.QObject.connect(self.lineEdit_2,
QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
self.materialsInstance.setFilterDict(L,self,bought_price,persianToInteger(unicode(self.lineEdit_2.text()

QtCore.QObject.connect(self.lineEdit_3,
QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
self.materialsInstance.setFilterDict(L,self,stock,persianToInteger(unicode(self.lineEdit_3.text()


QtCore.QObject.connect(self.lineEdit,
QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
self.materialsInstance.responseToRequestForData(self))

QtCore.QObject.connect(self.lineEdit_2,
QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
self.materialsInstance.responseToRequestForData(self))

QtCore.QObject.connect(self.lineEdit_3,
QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
self.materialsInstance.responseToRequestForData(self))

QtCore.QObject.connect(self.lineEdit,
QtCore.SIGNAL(_fromUtf8(returnPressed())), lambda:
self.materialsInstance.responseToRequestForData(self))

QtCore.QObject.connect(self.lineEdit_2,
QtCore.SIGNAL(_fromUtf8(returnPressed())), lambda:
self.materialsInstance.responseToRequestForData(self))

QtCore.QObject.connect(self.lineEdit_3,
QtCore.SIGNAL(_fromUtf8(returnPressed())), lambda:
self.materialsInstance.responseToRequestForData(self))

##PushButton:
QtCore.QObject.connect(self.pushButtonSearch,
QtCore.SIGNAL(_fromUtf8(clicked())), lambda:
self.materialsInstance.responseToRequestForData(self))



def setFilterDict(self,widget,obj,field,lineEditContent):
if field not in obj.materialsInstance.filterNameDict.keys():

obj.materialsInstance.filterNameDict.update({field:lineEditContent})



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.

Yours,
Mohsen

-- 
https://mail.python.org/mailman/listinfo/python-list


Re: Qt connect and first connect or unicode

2013-09-16 Thread Mohsen Pahlevanzadeh
On Tue, 2013-09-17 at 08:42 +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()))
 
 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()
 
 QtCore.QObject.connect(self.checkBox_4,
 QtCore.SIGNAL(_fromUtf8(toggled(bool))), lambda:
 self.materialsInstance.setFilterDict(C,self,stock,persianToInteger(unicode(self.lineEdit_3.text()
 
 ##LineEdit
 QtCore.QObject.connect(self.lineEdit,
 QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
 self.materialsInstance.setFilterDict(L,self,name,self.lineEdit.text()))
 
 QtCore.QObject.connect(self.lineEdit_2,
 QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
 self.materialsInstance.setFilterDict(L,self,bought_price,persianToInteger(unicode(self.lineEdit_2.text()
 
 QtCore.QObject.connect(self.lineEdit_3,
 QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
 self.materialsInstance.setFilterDict(L,self,stock,persianToInteger(unicode(self.lineEdit_3.text()
 
 
 QtCore.QObject.connect(self.lineEdit,
 QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
 self.materialsInstance.responseToRequestForData(self))
 
 QtCore.QObject.connect(self.lineEdit_2,
 QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
 self.materialsInstance.responseToRequestForData(self))
 
 QtCore.QObject.connect(self.lineEdit_3,
 QtCore.SIGNAL(_fromUtf8(editingFinished())), lambda:
 self.materialsInstance.responseToRequestForData(self))
 
 QtCore.QObject.connect(self.lineEdit,
 QtCore.SIGNAL(_fromUtf8(returnPressed())), lambda:
 self.materialsInstance.responseToRequestForData(self))
 
 QtCore.QObject.connect(self.lineEdit_2,
 QtCore.SIGNAL(_fromUtf8(returnPressed())), lambda:
 self.materialsInstance.responseToRequestForData(self))
 
 QtCore.QObject.connect(self.lineEdit_3,
 QtCore.SIGNAL(_fromUtf8(returnPressed())), lambda:
 self.materialsInstance.responseToRequestForData(self))
 
 ##PushButton:
 QtCore.QObject.connect(self.pushButtonSearch,
 QtCore.SIGNAL(_fromUtf8(clicked())), lambda:
 self.materialsInstance.responseToRequestForData(self))
 
 
 
 def setFilterDict(self,widget,obj,field,lineEditContent):
 if field not in obj.materialsInstance.filterNameDict.keys():
 
 obj.materialsInstance.filterNameDict.update({field:lineEditContent})
 
 
 
 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.
 
 Yours,
 Mohsen
 
I see same output in console:
{'stock': 2, 'name': PyQt4.QtCore.QString(u''), 'bought_price': 23}


-- 
https://mail.python.org/mailman/listinfo/python-list