es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo heredar widgets de otro archivo .py

Tengo 3 archivos tkinter bastante grandes, cada uno funcionando perfectamente, pero quisiera tenerlos en una sola pantalla: cómo utilizar páginas que he aprendido recientemente en este foro (GR). Ahora, me gustaría tener la mayor parte de la codificación para las páginas separadas en archivos .py separados. Sin embargo, especialmente en el caso de los widgets, no puedo entender cómo utilizar los nombres de los marcos en el archivo .py separado. Me doy cuenta, como lo intenté, de que la función para la creación de etiquetas es:

Ejemplo de forma abreviada:

Main.py

from functions import *
root = tk.Tk()
root.title("Programa de Kombucha")
root.geometry("1400x800")
root.minsize(width=900, height=600)
root.grid_rowconfigure(3, weight=1)
root.grid_columnconfigure(2, weight=1)
root.configure(bg='#000080')

theFrame = tk.Frame(root, width=1200, height=630, bg='amarillo')       #0059b3')
theFrame.grid(column=0,row=1, sticky = N, in_ = root)

getlabels()

mainloop()

functions.py

def getLabels():
    exitButton = tk.Button(theFrame, text="Salir del Programa",  width = 12, command=root.destroy)
    exitButton.grid(row = 0, column = 0)
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para usar los nombres de los marcos en un archivo .py separado, debes pasar el objeto del marco como un argumento a la función definida en ese archivo.

    Por ejemplo, en tu caso, si quieres crear una etiqueta dentro del marco “theFrame”, puedes definir una función en “functions.py” que tome “theFrame” como argumento y cree la etiqueta utilizando dicho marco. Luego, puedes llamar a esta función en “Main.py” pasando “theFrame” como argumento.

    Aquí tienes un ejemplo:

    Main.py

    import tkinter as tk
    from functions import get_labels
    
    root = tk.Tk()
    root.title("Ejemplo GUI")
    root.geometry("500x500")
    
    theFrame1 = tk.Frame(root, width=200, height=200, bg='red')
    theFrame1.pack(side="left")
    
    theFrame2 = tk.Frame(root, width=200, height=200, bg='green')
    theFrame2.pack(side="left")
    
    theFrame3 = tk.Frame(root, width=200, height=200, bg='blue')
    theFrame3.pack(side="left")
    
    get_labels(theFrame1)
    get_labels(theFrame2)
    get_labels(theFrame3)
    
    root.mainloop()
    

    functions.py

    def get_labels(frame):
        label = tk.Label(frame, text="¡Hola, mundo!")
        label.pack()
    

    En el código anterior, creamos tres marcos en “Main.py” y los pasamos uno por uno a la función “get_labels()” definida en “functions.py”. Esta función crea una etiqueta dentro del marco dado y la empaqueta. Al hacer esto para los tres marcos, podemos mostrar tres etiquetas separadas en una misma pantalla.

Comments are closed.