[Tkinter-discuss] ttk.Spinbox missing?
Mark Summerfield
list at qtrac.plus.com
Thu Jun 14 08:54:25 CEST 2012
Hi Michael,
On Wed, 13 Jun 2012 20:43:24 +0200
Michael Lange <klappnase at web.de> wrote:
> Hi,
>
> Thus spoketh Mark Summerfield <list at qtrac.plus.com>
> unto us on Wed, 13 Jun 2012 13:55:36 +0100:
>
> >
> > I didn't check "everything", but I tried it and it worked. I respects
> > the from and to values (when using the up and down arrows or the up and
> > down arrow keys), but just like tk.Spinbox allows you to type in any
> > old junk.
>
> Sure, if you want only a certain set of values to be legal, you need to
> deal with validatecommand and friends, see
>
> http://www.tcl.tk/man/tcl8.4/TkCmd/spinbox.htm#M26
>
> Validation is not exactly trivial in Python though, because you will
> have to manage percent substitutions yourself, as in this little example
> of a spinbox that only accepts float values between -10.0 and 100.0:
>
> ########################################
> from Tkinter import *
>
> root = Tk()
> var = StringVar()
> var.set('0')
> s = Spinbox(root, from_=-10.0, to=100.0, increment=1, textvariable=var,
> validate='all', format='%0.1f')
> s.pack()
>
> def validate(old, new):
> if new == '':
> res = True
> else:
> try:
> x = float(new)
> if float(s['from']) <= x <= float(s['to']):
> res = True
> else:
> res = False
> except ValueError:
> res = False
> return res
>
> vcmd = (s.register(validate), '%s', '%P')
> s.config(vcmd=vcmd, invcmd=s.bell)
>
> root.mainloop()
> ########################################
Wow! I hadn't known about the register() method.
AFAIK it isn't in the Tcl/Tk or Tkinter documentation.
(Which makes me wonder what else is missing?)
Incidentally, in the example above, the '%s' and old value are
redundant.
Thanks:-)
--
Mark Summerfield, Qtrac Ltd, www.qtrac.eu
C++, Python, Qt, PyQt - training and consultancy
"Programming in Go" - ISBN 0321774639
http://www.qtrac.eu/gobook.html
More information about the Tkinter-discuss
mailing list