mis6 at pitt.edu (Michele Simionato) wrote in message news:<2259b0e2.0308121335.7f1ad18a at posting.google.com>...
danbmil99 at yahoo.com (dan) wrote in message news:<fbf8d8f2.0308120814.75e8dff at posting.google.com>...
Late to this thread, but --
in a similar situation, I just put:
_tkinter.dooneevent(_tkinter.DONT_WAIT)
in my main logic loop (cmd interpreter in your case), instead of
calling Frame.mainloop(). I believe Frame.update() does something
similar but for some reason this worked better.
ISTM this would be cleaner (and safer) than using threads. You can do
all your draw operations from your command line routines, and they
will get displayed as soon as the routine returns to your main loop to
wait for more input.
Am I missing something?
-dbm
I like quite a lot you suggestion! "dooneevent" was the method I was
looking for! Actually, I would rather prefer to avoid threads for such a
simple program. Thanks to the power of Python I wrote down a working
script in less than five minutes, even if probably I will need more
than five minutes to understand what I wrote ;)
Here it is:
import Tkinter as t
import cmd
root=t.Tk()
s=t.StringVar()
s.set('ciao')
label=t.Label(root,textvariable=s)
label.pack()
class Cmd(cmd.Cmd):
def do_display(self,arg):
s.set(arg)
root.tk.dooneevent(0)
def do_quit(self,arg):
root.quit()
return 'quit' # anything != None will do
Cmd().cmdloop()
I will later try it on Windows 98. Dunno exactly what "dooneevent" is doing,
I searched my python directories for "dooneevent" and found only one
usage of "doonevent" and copied it ;) Unfortunately "dooneevent"
has no docstring, however few experiments show that "dooneevent()"
is the same that "dooneevent(0)" whereas "dooneevent(1)" hangs up
(it is waiting for what??)
the problem is that most of the documentation is in TK/TCL itself.
TKinter is just a wrapper. There are some docs on how the stuff is
wrapped, then you have to go to Tk/tcl docs to get the real info.
My best guess is that it's a wrapper to this call:
http://www.tcl.tk/man/tcl8.4/TclLib/DoOneEvent.htmnote the confusion because it's really a tcl call, but Tkinter doesn't
make a distinction between tk & tcl.
Also note that there are at least three ways to get this behavior:
_tkinter.dooneevent(TCL_DONT_WAIT)
Frame.update()
Tkinter.dooneevent(0) #this is new to me! You found a third way to
call it
it's all a bit mysterious, but basically you're calling the event
handler within TK's mainloop.
best - dan