Calling function from another module
Peter Otten
__peter__ at web.de
Thu Dec 16 07:16:30 EST 2010
craf wrote:
> Hi.
>
> The query code is as follows:
>
> ------------------------------------------------------
> import Tkinter
> import tkMessageBox
>
>
> class App:
> def __init__(self, master):
> master.protocol("WM_DELETE_WINDOW",quit)
>
>
> def quit():
> if tkMessageBox.askyesno('','Exit'):
> master.quit()
>
>
> master =Tkinter.Tk()
> app = App(master)
> master.mainloop()
> -------------------------------------------------------
>
> As you can see, when I run and close the main window displays
> a text box asking if you want to quit, if so, closes
> application.
>
> Question:
>
> Is it possible to define the quit() function in another separate
> module?.
> I tried it, but it throws the error that the global name
> 'master' is not defined.
You can have the modules import each other and then access the master as
<module>.master where you'd have to replace <module> with the actual name of
the module, but that's a bad design because
(1) you create an import circle
(2) functions relying on global variables already are a bad idea
Your other option is to pass 'master' explicitly and then wrap it into a
lambda function (or functools.partial):
$ cat tkquitlib.py
import tkMessageBox
def quit(master):
if tkMessageBox.askyesno('','Exit'):
master.quit()
$ cat tkquit_main.py
import Tkinter
import tkquitlib
class App:
def __init__(self, master):
master.protocol("WM_DELETE_WINDOW", lambda: tkquitlib.quit(master))
master = Tkinter.Tk()
app = App(master)
master.mainloop()
Peter
More information about the Python-list
mailing list