Hi --
I'm trying to use a gtk.HScale widget to select integer values, so I
use HScale.set_digits(0). However, I also don't want the widget to
display its value, because the value is also displayed in an
accompanying gtk.Entry. But if I use HScale.set_draw_value(False), the
set_digits(0) doesn't work anymore!HScale.get_value() returns
non-integers. Am I doing something wrong, or is this a bug?
I'm using pygtk 2.6.2 and python 2.3.5.
Many thanks.
-- Steve
Here's an example:
import pygtk
pygtk.require('2.0')
import gtk
class SliderTest:
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title("Slider")
self.window.connect("delete_event", self.delete_event)
self.window.set_border_width(20)
vbox = gtk.VBox(True, 2)
self.window.add(vbox)
self.suppress = False # avoids infinite callback loops
self.adjustment = gtk.Adjustment(value=0,
lower=0,
upper=100,
step_incr=1,
page_incr=1);
self.slider = gtk.HScale(self.adjustment)
## This line should restrict the HScale widget to integer
values...
self.slider.set_digits(0)
## ... but it doesn't unless this line is removed.
self.slider.set_draw_value(False)
vbox.pack_start(self.slider, expand=0, fill=0)
self.adjsignal = self.adjustment.connect('value-changed',
self.text_from_slider)
self.entry = gtk.Entry()
vbox.pack_start(self.entry, expand=0, fill=0)
self.set_value(50)
self.entry.connect('changed', self.entry_changed)
self.entry.connect('activate', self.slider_from_text)
self.entry.connect('focus-out-event', self.entry_lost_focus)
self.window.show_all()
def delete_event(self, widget, event, data=None):
gtk.main_quit()
return False
def set_value(self, value):
if value < self.adjustment.lower:
self.adjustment.set_value(self.adjustment.lower)
elif value > self.adjustment.upper:
self.adjustment.set_value(self.adjustment.upper)
else:
self.adjustment.set_value(value)
self.adjustment.value_changed()
def text_from_slider(self, *args):
if not self.suppress:
self.suppress = True
val = self.slider.get_value()
self.entry.set_text("%-8g" % val)
self.suppress = False
def entry_changed(self, *args):
self.slider_from_text()
def entry_lost_focus(self, *args):
self.slider_from_text()
def slider_from_text(self, *args):
if not self.suppress:
self.suppress = True
try:
v0 = eval(self.entry.get_text())
except:
pass
else:
self.adjustment.set_value(self.clip(v0))
self.suppress = False
def clip(self, val):
v = max(val, self.adjustment.lower)
v = min(v, self.adjustment.upper)
return v
def main():
gtk.main()
return 0
if __name__ == "__main__":
SliderTest()
main()
--
-- EMail: [EMAIL PROTECTED] Phone: (301)
975-5423 --
-- WWW: http://math.nist.gov/mcsd/Staff/SLanger/ Fax: (301)
990-4127 --
-- Mail: NIST; 100 Bureau Drive -- Stop 8910; Gaithersburg, Md
20899-8910 --
-- "I don't think this will work. That's why it's science."
--
-- Naomi Langer, 17 Feb 2003
--
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://www.async.com.br/faq/pygtk/