Darren Enns wrote:
> Lauro Moura wrote:
>> On Wed, Apr 2, 2008 at 4:28 PM, Darren Enns <[EMAIL PROTECTED]>
>> wrote:
>>
>>> Help please!
>>>
>>> I am slowly learning OOP-style PyGTK code, and have recently
>>> discovered how
>>> 'nasty' gtk.Spinbutton looks on Maemo :(
>>>
>>> OK, so I was just going to make some quick changed to my Python
>>> code to use
>>> 'hildon.NumberEditor' instead, but it is not as much a
>>> 'drop-in-replacement'
>>> as a newbie like me requires...
>>>
>>> """ subclass the gtk.Digalog() class to create a new dialog window """
>>> class spin_window(gtk.Dialog) :
>>> value = [0] * SPIN_BUTTON_COUNT
>>>
>>> def hildon_set_value(self,widget,index):
>>> self.value[index] = widget.get_value()
>>> return
>>>
>>> # a callback to remember the values of the spin buttons.
>>> # the 'index' is setup when connecting the callback
>>> def set_value(self,widget,index):
>>> self.value[index] = widget.get_value_as_int()
>>> return
>>>
>>> def __init__(self,window):
>>> # init the parent class to create the dialog
>>> super(spin_window, self).__init__("set spin values",
>>> window,
>>> gtk.DIALOG_DESTROY_WITH_PARENT |
>>> gtk.DIALOG_MODAL,
>>> (gtk.STOCK_OK, gtk.RESPONSE_OK))
>>>
>>> number_editor = hildon.NumberEditor(-90,90)
>>> #number_editor.connect("changed",self.set_value, 0)
>>>
>>> #number_editor.connect("notify::value",self.set_value, 0)
>>>
>>> number_editor.connect("notify::value",self.hildon_set_value,0)
>>> number_editor.set_value(0)
>>> self.vbox.pack_start(number_editor)
>>> self.value[0] = 0
>>> number_editor.show()
>>>
>>> label = gtk.Label('Latitude Degrees:')
>>> self.vbox.pack_start(label)
>>> #label.modify_font(pango.FontDescription("sans 30"))
>>> label.show()
>>>
>>> adjustment = gtk.Adjustment(0, -90, 90, 1, 1, 1)
>>> spinbutton = gtk.SpinButton(adjustment,0,0)
>>> spinbutton.connect("changed",self.set_value, 1)
>>> self.vbox.pack_start(spinbutton)
>>> self.value[1] = 0
>>> spinbutton.show()
>>> ...
>>>
>>> Notice my feeble attempts to add 'special' code for the
>>> numbereditor -- but
>>> the code above does not work:
>>>
>>> "TypeError: hildon_set_value() takes exactly 3 arguments (4 given)"
>>>
>>> So I am getting all confused! It *looks* like I am using the correct
>>> signal value, and passing three parameters...
>>>
>>> There are very few Python examples out on Google for me to learn the
>>> solution with.
>>>
>>>
>>
>> Try replacing the argument list on the callback to
>>
>> def set_value(self, widget, index, data=None)
>>
>> Now data will take the extra data passed when the signal is received.
>>
>> Thanks for the suggestion! It got me a bit further, but my parameter
>> offsets must be wrong. This is what my 'hildon' callback looks like
>> now:
>>
>
> def hildon_set_value(self, widget, index, data=None):
>
> When I use it that way, I get complaints that 'index' is not an integer
> (which of course it is):
>
> Traceback (most recent call last):
> File "mephemeris.22.py", line 2480, in hildon_set_value
> self.value[index] = widget.get_value()
> TypeError: list indices must be integers
>
> This suggests to me that I have the correct number of parameters, but
> not in the position I am expecting them in.
>
> Dare
OK, no reply to my last question, so here is my own progress :)
One of my other helpers suggested trying to find out a bit more about
this widget by temporarily adjusting my method:
def hildon_set_value(self,one,two,three):
print "one = ",type(one)," = ",one
print "two = ",type(two)," = ",two
print "three = ",type(three)," = ",three
return
When I did this, I got the following:
one = <type 'hildon.NumberEditor'> = <hildon.NumberEditor object at
0x408367b0 (HildonNumberEditor at 0x277030)>
two = <type 'gobject.GParamSpec'> = <GParamInt 'value'>
three = <type 'int'> = 0
This is mostly gibberish to me, but it suggested to me that my 'index'
parameter was really supposed to be the *last* parameter, and not the
2nd last:
def hildon_set_value(self, widget, data=None, index=0):
print "index=",index
self.value[index] = widget.get_value()
return
This *appears* to work, but I still am very confused about what is going
on. Should I just ignore my confusion with using 'hildon.NumberEditor'
and move on? It just seems silly to me to have this 'do-nothing'
parameter in the middle of no-where i.e. 'data=None'. Also, the
controls for the behavior of this widget seem very simplistic compared
to, say, SpinButton. As a matter of fact, even though the appearance is
*better* than with SpinButton, it is still very bad-looking (overlapping
labels and controls) in a 'Dialog' context. This makes it all so
difficult for a newbie like myself ;)
Thanks
_______________________________________________
maemo-developers mailing list
[email protected]
https://lists.maemo.org/mailman/listinfo/maemo-developers