¿Cómo uso un Spinbox en tkinter?
El rango se define con from_ y to —con el guion bajo final, porque from es una palabra reservada de Python— y el valor actual se lee con .get(), teniendo presente que lo que vuelve es texto.
import tkinter as tk
root = tk.Tk()
qty = tk.Spinbox(root, from_=1, to=10)
qty.pack()
def order():
n = int(qty.get()) # .get() devuelve texto, siempre
print("pidiendo", n)
tk.Button(root, text="Pedir", command=order).pack()
root.mainloop() El valor es texto aunque parezca un número
.get() devuelve texto sea cual sea el rango, así que hacer aritmética con él falla con TypeError o, peor, concatena en silencio. Conviértelo justo donde lo lees. Esto sigue siendo cierto con un IntVar detrás: la variable te da un entero, pero el widget sigue entregando texto.
int(qty.get()) + 1 # 2
qty.get() + 1 # TypeError
count = tk.IntVar(value=5)
tk.Spinbox(root, from_=0, to=10, textvariable=count)
count.get() + 1 # 6 — la variable sí tiene tipoPasos distintos de uno
increment define cuánto avanza cada clic de las flechas, y funciona con decimales igual que con enteros. Combínalo con un format cuando quieras que la pantalla quede alineada, porque si no un decimal puede mostrar más cifras de las que pretendías.
tk.Spinbox(root, from_=0, to=1, increment=0.1)Recorrer palabras
Pásale values en lugar de un rango y las flechas recorren tu lista en orden. El widget sigue devolviendo texto, que en este caso es exactamente lo que quieres, y la primera entrada aparece al arrancar en vez de dejar el campo vacío.
tk.Spinbox(root, values=("low", "medium", "high"))Escribir sigue estando permitido
Las flechas limitan lo que producen, pero el campo en sí es una entrada de texto: alguien puede escribir 999 en un Spinbox que llega hasta 10, y .get() te lo va a devolver. Comprueba el valor cuando lo leas, o añade validación, en vez de confiar en que el rango se haga cumplir solo.
Hacerlo sin buscarlo
Pon el rango en el inspector y la exportación escribe from_, to y el incremento que hayas indicado. Marca "Expose a variable" para tener un IntVar cuando quieras el valor ya tipado a la salida: la conversión de arriba es lo único que un diseñador no puede hacer por ti, porque solo tú sabes si el campo es una cantidad o una etiqueta.
Diseña la ventana visualmente y ve el código Python generado sobre la marcha.
Abrir el diseñador de tkinter →