07-12-2019, 09:28 AM (Última modificación: 07-12-2019, 09:29 AM por Myszowor.)
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?
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
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
09-12-2019, 08:17 AM (Última modificación: 09-12-2019, 08:17 AM por Myszowor.)
(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.
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.
self.label02 = ttk.Label(self.frame04, text='ETIQUETA AÚN MUCHO MÁS SUPERLARGA', relief='raised', anchor=tk.CENTER, font=("DejaVu Sans
Condensed",12,'bold'))
self.label02.grid(row=0, column=0)
self.ventana.mainloop()
def main():
my_app = Appprueba()
if __name__ == '__main__':
main()
Bueno, soy incapaz de hacer que el botón aparezca pegado al entry. No hay manera. Tampoco puedo hacer que la etiqueta 02 aparezca "pegada" la etiqueta 01.
He probado con grid_propagate(), grid_resize(), grid_rowconfigure() o grid_columnconfigure() y nada de nada. Ya digo es una cuestión de orgullo porque me toca la moral. El grid_propagate(False), en principio parece que funciona pero desgraciadamente quita los widgets que hay dentro.
Parece que los frames adquieren el tamaño de los widgets que tienen dentro pero el problema es que todos los widgets que añades en distinta fila adquieren dicho tamaño y no encuentro la manera de solucionarlo.
Esto es lo que quiero llegar a poder hacerEs una imagen hecha con gimp pero da una idea de lo que quiero)
Acá le estás diciendo a Tk que button01 tiene que pegarse a la izquierda (tk.W = West = Oeste) del control padre, que es frame02. Eso efectivamente está ocurriendo, pero frame02 tiene prácticamente el mismo tamaño que button01, por lo que el resultado es imperceptible. Lo que querés que se pegue a tu caja de texto es en realidad tu frame02, así que deberías cambiar: