Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Problemas con método .grid()
#1
Buenas:

Una pregunta. Como dice el título estoy teniendo problemas en colocar los "widgets" dentro de la ventana principal. Me separa dichos widgets de una manera exagerada a pesar de estar estos dentro de distintos frames y no utilizar ni padx ni pady.

Os mando una imagen. No entiendo porque se separan de esa manera los frames. Debería estar todo "pegados" unos junto a otros y sin embargo me los separa de esa manera tan exagerada. (Sobre todo la separación de la etiqueta con fondo amarillo con respecto al resto)

¿Alguna idea?

Y ya que estamos por si esto no tuviera solución, ¿sería posible mezclar distintos métodos en distintas ventanas es decir .pack() en una ventana y .grid() en otra?

Muchas Gracias de antemano.


Archivos adjuntos Miniatura(s)
   
Responder
#2
Hola. Recordá que el posicionamiento vía grid() trabaja con columnas y filas. Pareciera que tu etiqueta con fondo amarillo está ocupando tres columnas, viéndolo en comparación con los controles que están abajo, y en ese caso tiene sentido que aparezca centrado ya que es el comportamiento por defecto. Pero sin el código no puedo ayudarte mucho más. Sí es posible mezclar los distintos sistemas de posicionamiento.

Saludos
Responder
#3
(08-12-2019, 11:01 PM)Francisco escribió: Hola. Recordá que el posicionamiento vía grid() trabaja con columnas y filas. Pareciera que tu etiqueta con fondo amarillo está ocupando tres columnas, viéndolo en comparación con los controles que están abajo, y en ese caso tiene sentido que aparezca centrado ya que es el comportamiento por defecto. Pero sin el código no puedo ayudarte mucho más. Sí es posible mezclar los distintos sistemas de posicionamiento.

Saludos
Muchas Gracias.

No he puesto el código porque se me está yendo de las manos y es larguísimo. Lo tengo todo por defecto. Te mando una pequeña parte del código a ver si así te sirve de más ayuda. A mí lo único que se me ocurre es "forzar" al método .grid() a que use única y exclusivamente una fila y una columna independientemente del tamaño de la etiqueta y de la fuente.

Este es el código de los frame:

  1. self.frameappccd1 = ttk.Frame(self.appccd, style="Frames.TFrame")
  2. self.frameappccd1.grid(row=0, column=0)
  3.  
  4. self.frameappccd2 = ttk.Frame(self.appccd, style="Frames.TFrame")
  5. self.frameappccd2.grid(row=0, column=1)
  6.  
  7. self.frameappccd3 = ttk.Frame(self.appccd, style="Frames.TFrame")
  8. self.frameappccd3.grid(row=0, column=2)
  9.  
  10. self.frameappccd4 = ttk.Frame(self.appccd, style="Frames.TFrame")
  11. self.frameappccd4.grid(row=0, column=3)
  12.  
  13. self.frameappccd5 = ttk.Frame(self.appccd, style="Frames.TFrame")
  14. self.frameappccd5.grid(row=1, column=0)
  15.  
  16. self.frameappccd6 = ttk.Frame(self.appccd, style="Frames.TFrame")
  17. self.frameappccd6.grid(row=1, column=1)
  18.  
  19. self.frameappccd7 = ttk.Frame(self.appccd, style="Frames.TFrame")
  20. self.frameappccd7.grid(row=1, column=2)


El Código de las Etiquetas (Sobre todo la de fondo amarillo):

  1. self.labappccdcat = ttk.Label(self.frameappccd1, text='C.A.T', font=('DejaVu Sans Condensed', 12, 'bold'), relief='groove', borderwidth=5, background='light green', justify='center')
  2. self.labappccdcat.grid(row=0, column=0)
  3.  
  4. self.labappccdCAT = ttk.Label(self.frameappccd1, text=CAT, font=('DejaVu Sans Condensed', 20, 'bold'), relief='sunken', background='#EAFF92', borderwidth=2, foreground='dark blue')
  5. self.labappccdCAT.grid(row=1, column=0, pady=5)
  6.  
  7. self.alertaappccd = ttk.Label(self.frameappccd2, text='ALERTANTE', font=('DejaVu Sans Condensed', 12, 'bold'), relief='groove', borderwidth=2, background='light green')
  8. self.alertaappccd.grid(row=0, column=0)
  9.  
  10. self.talertaappccd = ttk.Label(self.frameappccd2, text='TLF.ALERTANTE', font=('DejaVu Sans Condensed', 12, 'bold'), relief='groove', borderwidth=2, background='light green')
  11. self.talertaappccd.grid(row=0, column=1)


Esta es una pequeña parte del código porque como ya digo es larguísimo.
Responder
#4
Vale chicos. SOLUCIONADO. (a medias)



Son tantas cosas en la cabeza para hacer la aplicación completa que muchas veces nos olvidamos de lo básico y cometo errores absurdos.



Tema de sticky en el frame con el método .grid().



Tan sencillo como añadir en los frames la posición de los widgets.

 
  1. self.frameappccd1 = ttk.Frame(self.appccd, style="Frames.TFrame")
  2.  
  3. self.frameappccd1.grid(row=0, column=0, sticky='nw')




Muchas gracias aún así porque tú respuesta me ha inspirado para encontrar la solución a medias.

La etiqueta con fondo amarillo ya aparece dónde tiene que estar o al menos dónde yo la quiero. Aún sigo con las las otras etiquetas para que se "peguen" a la derecha de la etiqueta con fondo amarillo.

Os mando imagen de como va quedando. (Si alguien tiene idea de como solucionar lo del resto de los frames......)

La solución definitiva viene haciendo muchos menos frames pero me gustaría saber si es posible dividir cada widget en un frame y como unirlos.


Archivos adjuntos Miniatura(s)
       
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)