Re: tkinter.tix "Control" widget don't work with StringVar?

2019-06-01 Thread jfong
MRAB於 2019年6月2日星期日 UTC+8上午10時18分36秒寫道:
> On 2019-06-02 02:28, jf...@ms4.hinet.net wrote:
> > Below is a simplified version of the sample script downloaded from its 
> > package.
> > When run it, the entry field display '0' instead of 'P&W'.
> > PS. I am using Python 3.4.4, Windows 32bit
> > 
> > test0.py
> >   1 from tkinter import tix as Tix
> >   2
> >   3 root = Tix.Tk()
> >   4
> >   5 demo_maker = Tix.StringVar()
> >   6 demo_maker.set('P&W')
> >   7
> >   8 c = Tix.Control(root, label='Engine Maker: ',
> >   9variable=demo_maker,
> > 10options='entry.width 10 label.width 20 label.anchor e')
> > 11 c.pack(side=Tix.TOP, anchor=Tix.W)
> > 12
> > 13 root.mainloop()
> > 
> > 
> > I run it under pdb, try to figure out where the problem is:
> > 
> > D:\Works\Python>py -m pdb test0.py
> >> d:\works\python\test0.py(1)()
> > -> from tkinter import tix as Tix
> > (Pdb) tbreak 13
> > Breakpoint 1 at d:\works\python\test0.py:13
> > (Pdb) cont
> > Deleted breakpoint 1 at d:\works\python\test0.py:13
> >> d:\works\python\test0.py(13)()
> > -> root.mainloop()
> > (Pdb) !c['value']
> > '0'
> > (Pdb) !demo_maker.get()
> > 'P&W'
> > (Pdb) quit
> > 
> > If I change line 8 to "c = Tix.Control(root, label='Engine Maker: ', 
> > value='P&W',", the result is very interest:
> > 
> > D:\Works\Python>py -m pdb test0.py
> >> d:\works\python\test0.py(1)()
> > -> from tkinter import tix as Tix
> > (Pdb) tbreak 13
> > Breakpoint 1 at d:\works\python\test0.py:13
> > (Pdb) cont
> > Deleted breakpoint 1 at d:\works\python\test0.py:13
> >> d:\works\python\test0.py(13)()
> > -> root.mainloop()
> > (Pdb) !c['value']
> > '0'
> > (Pdb) !demo_maker.get()
> > '0'
> > (Pdb) quit
> > 
> > Anyone can help?
> > 
>  From the documentation:
> 
> """class tkinter.tix.Control
> The Control widget is also known as the SpinBox widget. The user can 
> adjust the value by pressing the two arrow buttons or by entering the 
> value directly into the entry. The new value will be checked against the 
> user-defined upper and lower limits."""
> 
> In other words, the widget that you're using is for entering a _number_; 
> you can click the up and down buttons to change its value. You usually 
> use it with tix.IntVar.
> 
> You're using it with tix.StringVar, which is for strings, and because 
> it's unable to interpret the value as a number, it's pretending that 
> it's 0 instead. You can, however, set it to, say, '1', or '01', and the 
> widget will then show the number 1.

From the documents, it sounds that this widget was designed for number only. 
But the original example Control.py from 
https://svn.python.org/projects/stackless/trunk/Demo/tix/samples/ works on 
string either by changing its button command. The only thing bothers me is that 
why it fails at the start-up? and I can't figure out the reason:-(
-- 
https://mail.python.org/mailman/listinfo/python-list


Re: tkinter.tix "Control" widget don't work with StringVar?

2019-06-01 Thread MRAB

On 2019-06-02 02:28, jf...@ms4.hinet.net wrote:

Below is a simplified version of the sample script downloaded from its package.
When run it, the entry field display '0' instead of 'P&W'.
PS. I am using Python 3.4.4, Windows 32bit

test0.py
  1 from tkinter import tix as Tix
  2
  3 root = Tix.Tk()
  4
  5 demo_maker = Tix.StringVar()
  6 demo_maker.set('P&W')
  7
  8 c = Tix.Control(root, label='Engine Maker: ',
  9variable=demo_maker,
10options='entry.width 10 label.width 20 label.anchor e')
11 c.pack(side=Tix.TOP, anchor=Tix.W)
12
13 root.mainloop()


I run it under pdb, try to figure out where the problem is:

D:\Works\Python>py -m pdb test0.py

d:\works\python\test0.py(1)()

-> from tkinter import tix as Tix
(Pdb) tbreak 13
Breakpoint 1 at d:\works\python\test0.py:13
(Pdb) cont
Deleted breakpoint 1 at d:\works\python\test0.py:13

d:\works\python\test0.py(13)()

-> root.mainloop()
(Pdb) !c['value']
'0'
(Pdb) !demo_maker.get()
'P&W'
(Pdb) quit

If I change line 8 to "c = Tix.Control(root, label='Engine Maker: ', 
value='P&W',", the result is very interest:

D:\Works\Python>py -m pdb test0.py

d:\works\python\test0.py(1)()

-> from tkinter import tix as Tix
(Pdb) tbreak 13
Breakpoint 1 at d:\works\python\test0.py:13
(Pdb) cont
Deleted breakpoint 1 at d:\works\python\test0.py:13

d:\works\python\test0.py(13)()

-> root.mainloop()
(Pdb) !c['value']
'0'
(Pdb) !demo_maker.get()
'0'
(Pdb) quit

Anyone can help?


From the documentation:

"""class tkinter.tix.Control
The Control widget is also known as the SpinBox widget. The user can 
adjust the value by pressing the two arrow buttons or by entering the 
value directly into the entry. The new value will be checked against the 
user-defined upper and lower limits."""


In other words, the widget that you're using is for entering a _number_; 
you can click the up and down buttons to change its value. You usually 
use it with tix.IntVar.


You're using it with tix.StringVar, which is for strings, and because 
it's unable to interpret the value as a number, it's pretending that 
it's 0 instead. You can, however, set it to, say, '1', or '01', and the 
widget will then show the number 1.

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


Re: tkinter.tix "Control" widget don't work with StringVar?

2019-06-01 Thread Terry Reedy

On 6/1/2019 9:28 PM, jf...@ms4.hinet.net wrote:

Below is a simplified version of the sample script downloaded from its package.
When run it, the entry field display '0' instead of 'P&W'.
PS. I am using Python 3.4.4, Windows 32bit

test0.py
  1 from tkinter import tix as Tix
  2
  3 root = Tix.Tk()
  4
  5 demo_maker = Tix.StringVar()
  6 demo_maker.set('P&W')
  7
  8 c = Tix.Control(root, label='Engine Maker: ',
  9variable=demo_maker,
10options='entry.width 10 label.width 20 label.anchor e')
11 c.pack(side=Tix.TOP, anchor=Tix.W)
12
13 root.mainloop()


Line numbers interfere with copy and paste.

Control or Spinbox controls a number that can be increased or decreased 
with the arrows.  You can use a number string like '33' or Intvar or 
Floatvar.


Note that tix is unmaintained, deprecated, and generally not advised for 
new code (or new users).


--
Terry Jan Reedy

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


tkinter.tix "Control" widget don't work with StringVar?

2019-06-01 Thread jfong
Below is a simplified version of the sample script downloaded from its package.
When run it, the entry field display '0' instead of 'P&W'.
PS. I am using Python 3.4.4, Windows 32bit

test0.py
 1 from tkinter import tix as Tix
 2 
 3 root = Tix.Tk()
 4 
 5 demo_maker = Tix.StringVar()
 6 demo_maker.set('P&W')
 7 
 8 c = Tix.Control(root, label='Engine Maker: ',
 9variable=demo_maker,
10options='entry.width 10 label.width 20 label.anchor e')
11 c.pack(side=Tix.TOP, anchor=Tix.W)
12 
13 root.mainloop()


I run it under pdb, try to figure out where the problem is:

D:\Works\Python>py -m pdb test0.py
> d:\works\python\test0.py(1)()
-> from tkinter import tix as Tix
(Pdb) tbreak 13
Breakpoint 1 at d:\works\python\test0.py:13
(Pdb) cont
Deleted breakpoint 1 at d:\works\python\test0.py:13
> d:\works\python\test0.py(13)()
-> root.mainloop()
(Pdb) !c['value']
'0'
(Pdb) !demo_maker.get()
'P&W'
(Pdb) quit

If I change line 8 to "c = Tix.Control(root, label='Engine Maker: ', 
value='P&W',", the result is very interest:

D:\Works\Python>py -m pdb test0.py
> d:\works\python\test0.py(1)()
-> from tkinter import tix as Tix
(Pdb) tbreak 13
Breakpoint 1 at d:\works\python\test0.py:13
(Pdb) cont
Deleted breakpoint 1 at d:\works\python\test0.py:13
> d:\works\python\test0.py(13)()
-> root.mainloop()
(Pdb) !c['value']
'0'
(Pdb) !demo_maker.get()
'0'
(Pdb) quit

Anyone can help?

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