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: ', > > 9 variable=demo_maker, > > 10 options='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)<module>() > > -> 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)<module>() > > -> 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)<module>() > > -> 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)<module>() > > -> 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