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.

Intentando crear filas de botones en tkinter para los elementos de una lista

Quiero crear botones para cada elemento en una lista, pero necesito descubrir cómo hacer que todos quepan en el mismo marco. Idealmente, me gustaría colocar 4 o 5 botones en una fila, luego los siguientes 4-5 botones se mostrarán directamente debajo. Esto es lo que tengo ahora:

from tkinter import ttk
from restaurantSoftware import restaurantInfo

class menuFrame:
    def __init__(self, frame):
        self.frame = frame

    availableItems = restaurantInfo.readRestaurantInfo('availableItems.csv')
    itemList = availableItems[0]
    priceList = availableItems[1]
    categoryList = availableItems[2]

    for item in itemList:
        button = ttk.Button(text=item)
        button.pack(side='left', ipadx=25, ipady=25)

Aquí tienes una captura de pantalla de cómo se ve mi diseño de tkinter cuando ejecuto el programa.

layout preview

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para ajustar varios botones en filas y columnas dentro del mismo marco, puedes usar el método grid en lugar de pack. Aquí hay un código de ejemplo que crea una cuadrícula de botones basados en el número de elementos en la variable itemList:

    from tkinter import ttk
    from restaurantSoftware import restaurantInfo
    
    class menuFrame:
        def __init__(self, frame):
            self.frame = frame
    
            availableItems = restaurantInfo.readRestaurantInfo('availableItems.csv')
            itemList = availableItems[0]
    
            # Definir el número de columnas y calcular el número de filas necesarias
            cols = 4
            rows = (len(itemList) + cols - 1) // cols
    
            # Crear una cuadrícula de botones
            for i, item in enumerate(itemList):
                row = i // cols
                col = i % cols
                button = ttk.Button(text=item)
                button.grid(row=row, column=col, padx=5, pady=5)
    

    El código anterior utiliza la división entera // para calcular el número de fila y el módulo % para calcular el número de columna basado en cols. Los parámetros padx y pady agregan margen alrededor de cada botón.

    Por defecto, cada fila y columna de la cuadrícula se ajustará al tamaño del botón más grande, por lo que es posible que desees ajustar los parámetros ipadx e ipady del widget Button para controlar el margen interno.

Comments are closed.