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.

El marco de Tkinter tiene dimensiones diferentes a las dimensiones proporcionadas y no sé por qué.

Estoy teniendo problemas con Tkinter ahora. Quería crear un diseño, pero si defino las dimensiones de la ventana (800×600) y creo un marco que también debe tener un ancho de 800, solo ocupa la mitad.

Intenté buscar en Google y cambiar el código, si multiplico el ancho por 2 (1600), entonces el marco se ajusta perfectamente a la pantalla.

Aquí está el código:

import tkinter as tk

SW, SH = 800, 600

win = tk.Tk()
win.geometry(f"{SW}x{SH}")

frm_appname = tk.Frame(
    master = win,
    bg = 'red'
)

frm_appname.place(
    anchor = tk.N,
    width = 800,
    relheight = (1/6)
)

Aquí está la salida:
Imagen de salida

¿Alguien puede explicarme qué sucedió aquí?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el marco se está colocando utilizando dimensiones absolutas (ancho = 800) en lugar de dimensiones relativas. Cuando se coloca un marco utilizando dimensiones absolutas, no tiene en cuenta el ancho del borde de la ventana y, por lo tanto, parece estar cortado.

    Para solucionar este problema, se recomienda utilizar dimensiones relativas basadas en el tamaño de la ventana. Por ejemplo, para crear un marco que tenga 800 píxeles de ancho y sea 1/6 del alto de la ventana, el parámetro width debe establecerse como win.winfo_width() (el ancho actual de la ventana) y el parámetro relheight debe establecerse como 1/6.

    Aquí tienes un fragmento de código actualizado:

    import tkinter as tk
    
    SW, SH = 800, 600
    
    win = tk.Tk()
    win.geometry(f"{SW}x{SH}")
    
    frm_appname = tk.Frame(
        master=win,
        bg='red'
    )
    
    frm_appname.place(
        anchor=tk.N,
        width=win.winfo_width(),
        relheight=1/6
    )
    

    Esto debería crear un marco que tenga 800 píxeles de ancho y cubra todo el ancho de la ventana.

Comments are closed.