Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Llamar una clase desde la clase main
#1
Hola buenos días. Esta es mi primera consulta...



Utilizando el código del ejemplo sobre clases, he separado las dos clases: GreetingFrame() y AboutFrame() en dos archivos independientes para aprender a llamarlos desde el archivo main, pero no me funciona bien, solo me llama a la primera clase pero no a la segunda. En el ejemplo original al ejecutar el programa principal aparecen las dos ventanas a la vez.

Por favor, ¿podéis ayudarme a ver si me aclaro? llevo ya tiempo intentándolo y no lo consigo.



Main.py


Código:
import tkinter as tk
from tkinter import ttk

import GreetingFrame
import AboutFrame

class Application(ttk.Frame):
   
    def __init__(self, main_window):
        super().__init__(main_window)
        main_window.title("Panel de pestañas en Tcl/Tk")
       
        self.notebook = ttk.Notebook(self)
       
        self.greeting_frame =GreetingFrame.GreetingFrame(self.notebook)
        self.notebook.add(self.greeting_frame, text="Saludos", padding=10)
       
        self.about_frame = AboutFrame.AboutFrame(self.notebook)
        self.notebook.add(self.about_frame, text="Acerca de", padding=10)
       
        self.notebook.pack(padx=10, pady=10)
        self.pack()


main_window = tk.Tk()
app = Application(main_window)

GreetingFrame.py


Código:
import tkinter as tk

from tkinter import ttk



class GreetingFrame(ttk.Frame):
   
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
       
        self.name_entry = ttk.Entry(self)
        self.name_entry.pack()
       
        self.greet_button = ttk.Button(
            self, text="Saludar", command=self.say_hello)
        self.greet_button.pack()
       
        self.greet_label = ttk.Label(self)
        self.greet_label.pack()
   
    def say_hello(self):
        self.greet_label["text"] = ("¡Hola, {}!".format(self.name_entry.get()))



AboutFrame.py


Código:
import tkinter as tk
from tkinter import ttk

class AboutFrame(ttk.Frame):
   
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
       
        self.label = ttk.Label(self)
        self.label["text"] = ("Visitanos en recursospython.com y ""foro.recursospython.com.")
        self.label.pack()
       
        self.web_button = ttk.Button(self, text="Visitar web")
        self.web_button.pack(pady=10)
       
        self.forum_button = ttk.Button(self, text="Visitar foro")
        self.forum_button.pack()



Perdon!



el archivo original es este: https://recursospython.com/guias-y-manua...k-tkinter/



Gracias!
Responder
#2
Hola. Está perfecto, solo te falta esto al final del Main.py, para iniciar el bucle principal de Tk:

Código:
main_window.mainloop()

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
Gracias! 
Me pongo......
Responder
#4
Parece que no funciona tampoco...
Fue en error al cortar y pegar.

Después de subsanarlo, solo importa la primera ventana y no la segunda.

Perfecto, tienes razón, funciona perfecto. 
Ha sido confusión mía. Confused

Muchas gracias por tu ayuda.
Responder
#5
¡De nada! Smile
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#6
Y ahora, si quiero que el botón "Visitar web" que esta en la pestaña "Acerca de...", escriba algo en el label que está en la pestaña "Saludos"? Como puedo hacer que se comuniquen desde distintas pestañas? Es que necesito hacer esto mismo pero desde dos clases diferentes una en main.py y otra en modulo.py, o sea, escribir texto en un entry desde un modulo externo. Sad.
Vaya , es un poco complicado...

Muchas gracias por la paciencia.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)