El día 3 de diciembre de 2010 20:08, craf <[email protected]> escribió:
> Desde el modulo Fmain.py, llamo a una ventana secundaria Toplevel en el
> modulo FSecondWindow.
>
> Definí la ventana Toplevel dentro de una función llamada window, y la
> cual es llamada por el button1 desde el modulo FMain.
>
> Funciona, pero.... ¿Existe otra forma de llamar a la ventana Toplevel,
> sin tener que integrarla dentro de una función?. ¿Es correcto hacerlo de
> esta forma o hay una forma mas "elegante" de hacerlo.
Se puede hacer más elegante (más desacoplado), pero necesitaría saber
cuál es el propósito de tener dos módulos separados. De ser posible,
siempre es mejor que todo lo que tenga que ver con el interface
gráfico vaya en un único módulo. Si quieres reusabilidad, entonces
emplea la orientación a objetos, normalmente derivando de "Frame".
Otros consejos: no importar módulos con "import *" y evitar usar lambdas.
Una primera aproximación podría ser ésta:
--- FMain.py
import Tkinter
class MyApp:
def __init__(self,master):
button1 = Tkinter.Button(master,text='Muestra
TopLevel',command=self.show_window2)
button1.pack()
def show_window2(self):
from FSecondWindow import SecondWin
t=Tkinter.Toplevel()
SecondWin(t)
root=Tkinter.Tk()
app=MyApp(root)
root.mainloop()
--- FSecondWindow.py
import Tkinter
class SecondWindow:
def __init__(self,master):
button1 = Tkinter.Button(master,text='Hello')
button1.pack()
Un poco más desacoplado:
--- FMain.py
class MyApp:
....
def show_window2(self):
from FSecondWindow import MyFrame2
t=Tkinter.Toplevel()
MyFrame2(t).pack()
....
--- FSecondWindow.py
from Tkinter import Frame, Button
class MyFrame2(Frame):
def __init__(self,master):
Frame.__init__(self, master)
Button(self,text='Hello').pack()
_______________________________________________
Python-es mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/