Re: Calling function from another module
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 -- http://mail.python.org/mailman/listinfo/python-list
[Fwd: Re: Calling function from another module]
- Mensaje reenviado De: Peter Otten __pete...@web.de Para: python-list@python.org Asunto: Re: Calling function from another module Fecha: Thu, 16 Dec 2010 13:16:30 +0100 Grupos de noticias: comp.lang.python 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 Hi Peter. ¡Right!. Your example can separate the creation of the interface to the code execution. Thanks for your time. Regards Cristian -- http://mail.python.org/mailman/listinfo/python-list
Calling function from another module
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. Thanks in advance. Regards Cristian Abarzúa -- http://mail.python.org/mailman/listinfo/python-list
Re: Calling function from another module
On Dec 15, 6:46 pm, craf p...@vtr.net 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. Please explain in detail what the other module is doing. And as written this class app looks pretty useless to me. Why subclass Tk (well it appears you tried to subclass it anyway) just to override capabilities that are already available within Tk? Also i see many mistakes in this very small code sample. Using my deductive logic leads me to believe that many mistakes in a small code sample translates to enormous mistakes in a larger code base. So feel free to ramble incessantly about the intricate workings of this jewel of Python scripting you are soon to drop on this malnourished group of coders. -- http://mail.python.org/mailman/listinfo/python-list