Re: tkinter.tix "Control" widget don't work with StringVar?
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?
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?
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?
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