from tkinter import *
import pickle

class Persona(Frame): # La clase Persona hereda los atributos del widget Frame

    def __init__(self, master, nombre, apellido, dni):
        super().__init__(master)
        self.master   = master
        self.nombre   = nombre
        self.apellido = apellido
        self.dni      = dni
        self.pack()
        self.widgets()
    
    def mostrar(self):
        Label(root, text = "Nombre: {}".format(self.nombre)).pack(side = "left")
        Label(root, text = "Apellido: {}".format(self.apellido)).pack(side = "left")
        Label(root, text = "DNI: {}".format(self.dni)).pack(side = "left")
        

    def saludar_interprete(self):
        
        print("Hola mundo")

    def saludar_interfaz(self):

        Label(text = "Hola mundo").pack()

    def widgets(self): # Siempre debemos crear una función con todos nuestros widgets cuando trabajamos con POO

        Label(root, text = (self.nombre, self.apellido, self.dni) ).pack(side = "top", anchor = "w")
        Button(root, text = "Clícame y saludaré en el intérprete", command = self.saludar_interprete).pack()
        Button(root, text = "Clícame y saludaré en la interfaz", command = self.saludar_interfaz).pack()
        Button(root, text = "Clícame y te muestro lo que este instanciado", command = self.mostrar).pack()
        Frame(root, bg = "blue").pack(fill = "both", expand = True) # De esta forma se debe agregar un frame


root = Tk()
root.geometry("420x160")
# monitor = Label(root, command =)
app = Persona(master = root, nombre = "José", apellido = "Pérez", dni = "78425785")
root.mainloop()