tkinter: loading file before entering mainloop
Peter Billam
peter at www.pjb.com.au
Sat Mar 14 05:21:06 EDT 2009
> Peter Billam wrote:
> window = MainWindow(application)
> if (len(sys.argv) > 1) and os.path.exists(sys.argv[1]):
> window.loadFile(sys.argv[1])
> application.mainloop()
> File "./midimix", line 465, in loadFile
> space0.grid(row=grid_row,
> pady=round(0.5*(ymid[track_num]-ymid[track_num-1]))-50)
> ...
> _tkinter.TclError: bad pad value "-50": must be positive screen distance
> presumably because the window doesn't have dimensions before mainloop
> is entered. Can I force the window to be laid out before entering
> mainloop? Or can I invoke loadFile() after mainloop has started ?
On 2009-03-14, Peter Otten <__peter__ at web.de> wrote:
> The latter. Try
> application.after_idle(window.loadFile, sys.argv[1])
Thank you! That almost worked :-) It opened a window (which it didn't
do last time), and it laid out the frames and so on apparently OK,
and even posted a "Loaded v.mid" message on the StatusBar, but then
just drew a couple of zero-thickness lines right at the top of the
canvas, and failed with the same message:
File "./midimix", line 465, in loadFile
space0.grid(row=grid_row,
pady=round(0.5*(ymid[track_num]-ymid[track_num-1]))-50)
File "/usr/local/lib/python3.0/tkinter/__init__.py",
line 1845, in grid_configure
+ self._options(cnf, kw))
_tkinter.TclError: bad pad value "-50": must be positive screen distance
but I say "almost" because I googled after_idle, and the very similar:
application.after(500, window.loadFile, sys.argv[1])
does work, exactly as intended :-) except of course that it's a
race condition, and will fail for very impatient people or on very
slow machines. On my machine it still works with 20ms, but fails
with 10ms. Is there one extra magic trick I need to know?
I also tried invoking after_idle on the canvas widget:
window.canvas.after_idle(window.loadFile, sys.argv[1])
but that fails with the same message.
(I am using python 3.0.1 in case that's, er, relevant.)
Thanks for your help, Regards, Peter
--
Peter Billam www.pjb.com.au www.pjb.com.au/comp/contact.html
More information about the Python-list
mailing list