¿Lista de tamaño variable de casillas de verificación en Tkinter?

Estoy trabajando en una tarea de progtwigción. Estoy trabajando en Python y usando Tkinter para nuestra GUI. No puedo cambiar el idioma o la herramienta GUI, ni puedo usar ningún paquete adicional (por ejemplo, Tix ).

Necesito hacer una lista de artículos para tirar. Lo primero que pensé fue en una checkbox. Sin embargo, por lo que sé, Tkinter no tiene nada que admita un gran número (100+) de casillas de verificación. El número no es constante, y probablemente será diferente con cada ejecución del progtwig. En su propio marco, no he encontrado una manera de hacer que el marco se pueda desplazar. Intenté Listbox , pero no hay una buena manera de seleccionar múltiplos en esta escala.

¿Alguno de ustedes sabe de una manera de hacer esto?

Tkinter admite un número relativamente ilimitado de casillas de verificación, limitado principalmente por cuestiones prácticas como la memoria del sistema y las limitaciones de uso.

Hay al menos tres técnicas para hacer un contenedor desplazable para widgets. Tanto los canvass como los widgets de texto admiten el desplazamiento, por lo que la práctica generalmente aceptada es usar uno de esos para el contenedor. También puedes hacer trucos inteligentes con el comando de lugar si necesitas algo complejo.

El uso del canvas es bueno si desea desplazar un marco que contiene más que solo una lista vertical de objetos. Usar el widget de texto es bastante útil si todo lo que necesita hacer es crear una lista vertical única.

Aquí hay un ejemplo simple:

 import Tkinter as tk class Example(tk.Frame): def __init__(self, root, *args, **kwargs): tk.Frame.__init__(self, root, *args, **kwargs) self.root = root self.vsb = tk.Scrollbar(self, orient="vertical") self.text = tk.Text(self, width=40, height=20, yscrollcommand=self.vsb.set) self.vsb.config(command=self.text.yview) self.vsb.pack(side="right", fill="y") self.text.pack(side="left", fill="both", expand=True) for i in range(1000): cb = tk.Checkbutton(self, text="checkbutton #%s" % i) self.text.window_create("end", window=cb) self.text.insert("end", "\n") # to force one checkbox per line if __name__ == "__main__": root = tk.Tk() Example(root).pack(side="top", fill="both", expand=True) root.mainloop() 

A medida que aprenda más sobre Tkinter, se dará cuenta de que no hay tantos widgets incorporados como otros kits de herramientas. Esperamos que también te des cuenta de que Tkinter tiene suficientes bloques de construcción fundamentales para hacer casi cualquier cosa que puedas imaginar.