Re: tkFileDialog.askopenfile() mac

JBB <[email protected]>
Newsgroups gmane.comp.python.tkinter
Message-ID <[email protected]>
Kevin,

On 8/12/14, 7:19 PM, Kevin Walzer wrote:
> Hi,
> On 8/12/14, 10:23 AM, JBB wrote:
>> After some more digging, I find that Python uses the macosx backend on
>> initialization.  If I change this to tk before beginning work, the
>> problem goes away.  My Linux Python uses tk by default.
>
> What do you mean by this? On Mac, Tkinter/Tk uses native dialogs and
> widgets by default. What change did you make to get it to work on the Mac?

Thank you for the suggestions.  My notes:

I normally use the iPython Notebook for my Python coding.  As a newcomer 
to the language, the self-documenting features are helpful.

The following code works in the notebook:  A file dialog (native Mac) 
comes up, I can navigate, select a file, the dialog box closes, and the 
correct path and filename print.

%matplotlib tk
from Tkinter import *
import tkFileDialog
root = Tk()
root.withdraw()
filename = tkFileDialog.askopenfilename(parent=root)
print filename

If I don't have the initial magic command, the file dialog box hangs 
after file selection.  The rainbow ball just spins until I restart the 
kernel at which point it closes.

I normally invoke the notebook with
ipython notebook
%matplotlib at the first cell gives
Using matplotlib backend: MacOSX

I can't change the backend at this point so I have to restart the kernel 
and make sure to run %matplotlib tk before any imports.

This is a convenient albeit slightly kludgy way of setting the backend.


If I invoke the notebook with:
ipython notebook --matplotlib=tk

then the code above _without_ the %magic command works fine.


> I did see the dialog hanging on the Mac. My guess is that you weren't
> giving the event loop enough time to spin; the dialog was popping up too
> fast. This code works just fine:
>
> from Tkinter import *
> import tkFileDialog
> root = Tk()
> def openfile():
>      tkFileDialog.askopenfilename(parent=root)
> b = Button(root, text="Open", command=openfile).pack()
> root.mainloop()

I tried this in a fresh notebook.

A small window opens, when I mouseover, an Open button appears.  I click 
it, I get a native Mac file dialog box.  I navigate, select a file, the 
dialog box disappears and the small window/button remain.  The kernel on 
the notebook shows busy until I close the small window.

I'm not up on the Button and .pack tools as yet.  I don't know where the 
filename is stored.


JBB
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.