Autor
|
Tema: ¿Se puede simplificar el código del Checkbutton en tkinter? [SOLUCIONADO] :) (Leído 3,685 veces)
|
Yidu
Desconectado
Mensajes: 133
|
Hola de nuevo! Llevo un tiempo haciendo programas de Python en consola. Ahora me he decidido por usar una GUI. Y me he decantado por tkinter. He ido conociendo un poco los widgets y con el Checkbutton me han asaltado unas dudas: En casi todos los ejemplos se crean unos pocos Checkbutton. Para cada uno de ellos se debe crear la variable de su estado y una función (normalmante llamada por command del widget Button). Pero claro, si queremos crear, por ejemplo, diez o veinte Checkbutton la cosa se desmadra y se crea un código redundante y repetitivo. Ejemplo: def imprime(): global lista lista = [] if _1.get() == 1: lista.append(1) if _2.get() == 1: lista.append(2) if _3.get() == 1: lista.append(3) if _4.get() == 1: lista.append(4) if _5.get() == 1: lista.append(5) if _6.get() == 1: lista.append(6) if _7.get() == 1: lista.append(7) if _8.get() == 1: lista.append(8) if _9.get() == 1: lista.append(9) if _10.get() == 1: lista.append(10) _1 = IntVar() _2 = IntVar() _3 = IntVar() _4 = IntVar() _5 = IntVar() _6 = IntVar() _7 = IntVar() _8 = IntVar() _9 = IntVar() _10 = IntVar() chk1 = Checkbutton(ventana, text = '1', variable = _1, onvalue = 1, offvalue = 0).place(x = 10, y = 30) chk2 = Checkbutton(ventana, text = '2', variable = _2, onvalue = 1, offvalue = 0).place(x = 10, y = 60) chk3 = Checkbutton(ventana, text = '3', variable = _3, onvalue = 1, offvalue = 0).place(x = 10, y = 90) chk4 = Checkbutton(ventana, text = '4', variable = _4, onvalue = 1, offvalue = 0).place(x = 10, y = 120) chk5 = Checkbutton(ventana, text = '5', variable = _5, onvalue = 1, offvalue = 0).place(x = 10, y = 150) chk6 = Checkbutton(ventana, text = '6', variable = _6, onvalue = 1, offvalue = 0).place(x = 10, y = 180) chk7 = Checkbutton(ventana, text = '7', variable = _7, onvalue = 1, offvalue = 0).place(x = 10, y = 210) chk8 = Checkbutton(ventana, text = '8', variable = _8, onvalue = 1, offvalue = 0).place(x = 10, y = 240) chk9 = Checkbutton(ventana, text = '9', variable = _9, onvalue = 1, offvalue = 0).place(x = 10, y = 270) chk10 = Checkbutton(ventana, text = '10', variable = _10, onvalue = 1, offvalue = 0).place(x = 60, y = 30)
Esto es un extracto del código. El que hace referencia a la duda que me surge. Es decir, se puede dar el caso que un programa tenga 100 casillas a seleccionar ¿Cómo se puede evitar este código tan repetitivo? Saludos!
|
|
« Última modificación: 14 Julio 2017, 18:56 pm por Yidu »
|
En línea
|
|
|
|
engel lex
|
no se porque tienes variables _1, _2 en lugar de usar un array mi solución sería (asumiendo que en lugar _1, _2 tienes un array con sus elementos def imprime(elementos): lista = [] maximo_y = 9 chk = [] for i in range(len(elementos)): if elementos[i].get() == 1: lista.append(i+1) elementos[i] = IntVar() chk.append( Checkbutton(ventana, text = str(i), variable = elementos[i], onvalue = 1, offvalue = 0).place(x = int(i/maximo_y)*50+10, y = (i%maximo_y)*30+30) )
lo estoy haciendo a mente, así que revisa, pero la logica debería estar bien, creo
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
Yidu
Desconectado
Mensajes: 133
|
Muchas gracias por el script Me imaginaba, que no era lógico, poner tantos IFs y líneas repetitivas. Vi unos ejemplos donde su autor explicaba, de alguna manera, el Checkbutton. Claro esta que en su ejemplo eran solo tres Checkbutton. Pero claro, si uno debe poner cien (por ejemplo), tarde o temprano se las tiene que ingeniar con un algoritmo como el tuyo. Le echado un vistazo por encima y creo que debe estar bien. Eso sin contar que luego recomiendan usar la OOP para usar tkinter. Para familiarizarme con tkinter estaba creando un simple escrutador de loteria primitiva. Aquí una captura: Al final, el tema de la ubicación de los Checkbutton lo he solucionado en el siguiente script. Seguramente tu método será mejor. Pero a mi me gusta (aunque sean mas lineas) que el código no quede tan compacto. Lo digo en referencia del método place(). # Creacion de los Checkbutton varsCheck =[] coord_x, coord_y = 10, 60 # Coordenadas iniciales for i in range(0, 49): varsCheck.append(IntVar()) Checkbutton(ventana, text = str(i + 1), variable = varsCheck[i], onvalue = 1, offvalue = 0).place(x = coord_x, y = coord_y) coord_y += 30 if coord_y > 300: coord_y = 30 coord_x += 50
|
|
« Última modificación: 14 Julio 2017, 18:56 pm por Yidu »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
simplificar dos numeros
Programación Visual Basic
|
erick185
|
2
|
2,002
|
9 Mayo 2006, 20:46 pm
por Ironhorse
|
|
|
[Solucionado][Python y TkInter] Problme con entries múltiples
Scripting
|
kerith
|
0
|
3,519
|
12 Enero 2011, 15:41 pm
por kerith
|
|
|
Simplificar codigo
« 1 2 »
.NET (C#, VB.NET, ASP)
|
matiasramos
|
10
|
5,987
|
24 Junio 2013, 21:09 pm
por Novlucker
|
|
|
[Python3 + tkinter] Ayuda ventanas en cascada tkinter
Scripting
|
darkweb64
|
2
|
4,027
|
11 Diciembre 2015, 18:04 pm
por darkweb64
|
|
|
Explicación de estas líneas (Flash) y simplificar el código.
Programación General
|
Tachikomaia
|
1
|
1,477
|
9 Junio 2024, 18:51 pm
por EdePC
|
|