Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Frames con tkinter
#1
Hola a todos:

Les escribo el código el cual crea una ventana y dentro de esta 3 frames:

Código:
try:
    import tkinter as tk
    from tkinter import ttk
    from tkinter import *
except ImportError:
    raise ImportError("Se requiere el modulo tkinter (tkinter3-tk)")

#creo la ventana
ventana=tk.Tk()
#dimension ventana
ventana.geometry("1200x600")
#título ventana
ventana.title("Programación grafica con tkinter")
#frame 1
frame_titulo = Frame(ventana, width=1200, height=40,
            bg="#566573",bd=5,relief="groove")
frame_titulo.grid(row=0,column=0)
#frame 2
frame_campos= Frame(ventana, width=1200, height=400,bg="lightblue",
                    bd=10,relief="flat")
frame_campos.grid(row=1,column=0)
#frame 3
frame_botones= Frame(ventana, width=1000, height=40,bg="#566573",
                  bd=10,relief="flat")
frame_botones.grid(row=2,column=0)

Hasta aquí todo bien. Cuando ejecuto el siguiente código:

Código:
Label(frame_titulo,text="Primer frame",
    bg="#566573",fg="white",font=("Arial 16 bold")).grid(row=0,column=0)

El frame1 llamado frame_titulo se dimensiona al tamaño del label.

¿Que tengo que modificar del código para que pueda solucionarlo?

Saludos.

Diego.
Responder
#2
Hola, bienvenido.

Si vás a usar grid() para posicionar los elementos, tenés que tratar la ventana también como una grilla. Entonces, el primer paso es hacer que la primera columna (donde está tu frame_titulo) ocupe todo el ancho de la ventana:

Código:
ventana.columnconfigure(0, weight=1)

Después, tenés que indicar que el frame_titulo tiene que expandirse a la izquierda y a la derecha a medida que se redimensiona la ventana, así:

Código:
# w = west, izquierda; e = east, derecha
frame_titulo.grid(row=0,column=0, sticky="we")

Y por último, si lo único que vas a tener en tu frame_titulo es una etiqueta, y querés que aparezca centrada, también expandís la sola columna que tiene tu frame:

Código:
frame_titulo.columnconfigure(0, weight=1)

Todo esto está explicado acá: https://recursospython.com/guias-y-manua...n-tkinter/.

De todas formas, capaz no sea necesario que crees tantos Frames. Podés crear uno solo y vía grid() e ir dividiéndolo en filas y columnas (aunque un widget puede ocupar más de una fila y una columna). Ese fondo que creaste para frame_titulo, podría ser directamente el fondo de la etiqueta, y evitás crear un control adicional.

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


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)