Tkinter(newbie) Inside Pythonwin

Kragen Sitaker kragen at dnaco.net
Wed Sep 27 00:14:47 EDT 2000


In article <39D09D53.C036926E at wolfson.co.uk>,
Gordon McLeod  <Gordon.McLeod at wolfson.co.uk> wrote:
>I'm having problems running a simple example from Fredrik Lundh's An
>Introduction to Tkinter book in Pythonwin.
>
>http://www.pythonware.com/library/tkinter/introduction/hello-again.htm
>
>When I run from windows explorer it works fine, but from pythonwin
>(1.5.2) the QUIT button doesn't close the window. The The tk window is
>left on the screen and running again creates more tk windows. The window
>'X' box closes the window in both, and the hello button works fine in
>both.

Calling frame.quit terminates the main loop, not the program.  Running
non-interactively, terminating the main loop terminates the program;
running interactively, it just returns you to the Python prompt.

At least, that's what's happening on my Linux box :)

>Is there a missing destroy call or something?

Changing frame.quit to root.destroy seems to make it do what you expect
it to do.

>I reproduce the example below:
>
> . . . 
>       self.hi_there = Button(frame, text="Hello", command=self.say_hi)
>       self.hi_there.pack(side=LEFT)
>
>   def say_hi(self):
>       print "hi there, everyone!"

This is a perfect example of why generalized lambda would be a useful
thing.  There's no need to put say_hi in a separate function; callbacks
from GUI objects can usually more conveniently be simple anonymous
blocks of code than named functions.  I'd like to be able to say

self.hi_there = Button(frame, text="Hello", 
                       command=lambda: print "hi there, everyone!")

instead.  Which is what I do in Tcl:

frame .frame                                       
pack .frame
button .frame.button -text Hello -command {puts "hi there, everyone!"}
pack .frame.button

and Perl, although bizarrely I don't have Perl's Tk interface installed
at the moment, so I can't confidently post syntax, but it's something
like -command => sub { print "hi there, everyone!\n" }.
-- 
<kragen at pobox.com>       Kragen Sitaker     <http://www.pobox.com/~kragen/>
Perilous to all of us are the devices of an art deeper than we ourselves
possess.
                -- Gandalf the Grey [J.R.R. Tolkien, "Lord of the Rings"]



More information about the Python-list mailing list