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.

¿Los marcos en Tkinter contienen sistemas de grillas locales?

Es una pregunta muy simple para la que no puedo encontrar respuesta en Stack Exchange (solo encontré este hilo engañoso: https://stackoverflow.com/questions/26475614/python3-tkinter-grids-within-grids-frames-alongside-other-frames que lamentablemente no responde la pregunta). Estoy usando tkinter con Python para intentar un programa con GUI, pero desafortunadamente no entiendo completamente el sistema de cuadrícula. Pensaba que cada marco contenía su propio sistema de cuadrícula, donde (0,0) es la esquina superior izquierda de ese marco. Creé este código y esperaba que dado que la etiqueta se establece en (0,0) en el marco principal, la etiqueta aparecería en el marco principal. Desafortunadamente, no es así. Es extraño y molesto. Adjunto una imagen de lo que está sucediendo en lugar de lo que debería suceder. ¿Alguien podría explicarme cómo funciona el sistema de cuadrícula? Realmente no tenía problemas hasta que intenté agregar una barra de desplazamiento al marco principal: luego me di cuenta de que hay una seriedad incomodidad incorporada en tkinter y me gustaría entenderla adecuadamente. ¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema que estás enfrentando se debe a la forma en que estás asignando los marcos a las variables. Cuando usas el método .grid() en la misma línea en la que defines tus variables, las variables se asignan a None porque eso es lo que devuelve el método .grid(). Por lo tanto, cuando intentas crear la etiqueta usando main_frame, en realidad se está refiriendo a None que es el resultado de main_frame.grid().

    Para solucionar esto, debes crear tus marcos en una línea y luego asignarlos a un grid en otra línea. Así:

    root = Tk()
    
    main_frame = Frame(root, width='1520', height='1080', bg='#a1a1a1')
    main_frame.grid(row=0, column=1)
    
    side_frame = Frame(root, width='400', height='1080', bg='#757575')
    side_frame.grid(row=0, column=0)
    
    header_label = Label(main_frame, text='Encabezado', font=('Agency', 48), bg='#a1a1a1', fg='#ffffff')
    header_label.grid(row=0, column=0)
    

    Al hacer esto, tu variable main_frame se referirá al objeto real de Frame en lugar de None, y tu etiqueta aparecerá en el lugar correcto.

    En cuanto al sistema de cuadrícula en sí, es una forma de organizar los widgets (como marcos, etiquetas, botones, etc.) en filas y columnas. Cada widget se coloca en una fila y columna específicas dentro de un widget padre (como un marco). Los widgets pueden abarcar varias filas o columnas, y también pueden tener relleno o márgenes entre ellos. Los argumentos row y column en el método .grid() especifican dónde debe colocarse el widget dentro de la cuadrícula del widget padre.

    ¡Espero que eso ayude! Avísame si tienes alguna pregunta adicional.

Comments are closed.