A newbie question about using tix

David Sumbler david at aeolia.co.uk
Wed May 1 12:44:06 EDT 2019


On Tue, 2019-04-30 at 20:46 +0100, MRAB wrote:
> On 2019-04-30 16:40, David Sumbler wrote:
> > Running Ubuntu 18.04, Python 3.6.7, tkinter 8.6
> > 
> > I am very new to tkinter.  The simple program I am writing requires
> > a
> > user file to be selected before it does anything else, so I would
> > like
> > a file selection dialog in the main window as soon as the program
> > launches.
> > 
> > Tkinter only has askopenfilename(), but this produces a popup
> > dialog.
> > I can get something like what I want by specifying a small Tk()
> > window
> > and then calling askopenfilename() so that it covers the root
> > window.
> > 
> > It's not ideal, though.  From the documentation I thought that the
> > tix
> > FileSelectBox would do what I wanted, but I just can't get it to
> > work.
> > 
> > If I run:
> > 
> >       from tkinter import *
> >       from tkinter.tix import FileSelectBox
> >       root = Tk()
> >       f = FileSelectBox(root)
> > 
> > I get the following:
> > 
> >       Traceback (most recent call last):
> >         File "/home/david/bin/Gradient.py", line 4, in <module>
> >           f = FileSelectBox(root)
> >         File "/usr/lib/python3.6/tkinter/tix.py", line 795, in
> > __init__
> >           TixWidget.__init__(self, master, 'tixFileSelectBox',
> > ['options'], cnf, kw)
> >         File "/usr/lib/python3.6/tkinter/tix.py", line 311, in
> > __init__
> >           self.tk.call(widgetName, self._w, *extra)
> >       _tkinter.TclError: invalid command name "tixFileSelectBox"
> > 
> > I realize that assigning the value of FileSelectBox() isn't going
> > to
> > give me a filename: I'm just trying to get the basic syntax right
> > at
> > the moment.
> > 
> > I can't figure out what is wrong though.  Have I have misunderstood
> > how
> > it should be called, or is there something missing from my system?
> > 
> 
> For some reason, tix widgets don't work with normal tkinter widgets,
> so 
> you can't put a tix FileSelectBox on a tkinter.Tk widget.
> 
> There is, however, a tix.Tk widget that you can use instead:
> 
> import tkinter.tix as tix
> root = tix.Tk()
> f = tix.FileSelectBox(root)
> f.pack()

Thanks for that.

When I ran the above, I got:

     Traceback (most recent call last):
       File "/home/david/bin/GradientProfile_v2.py", line 2, in <module>
         root = tix.Tk()
       File "/usr/lib/python3.6/tkinter/tix.py", line 214, in __init__
         self.tk.eval('package require Tix')
     _tkinter.TclError: can't find package Tix

After an internet search, I tried:

    sudo apt install tix-dev tk-dev tk8.6-dev libxft-dev libfontconfig1-dev libfreetype6-dev libpng-dev

Now when I run the file the program just exits quickly, with no
reported errors, but no window(s).  If I add 'root.mainloop()' at the
end, I get an empty root window for a fraction of a second, then the
program exits with:

     Segmentation fault (core dumped)

Any suggestions as to where to go from here?

David



More information about the Python-list mailing list