Python - Lift() de tkinter no funciona como debería

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Lift() de tkinter no funciona como debería

Publicado por Antonio (6 intervenciones) el 19/03/2021 16:48:47
Según lo que vi en algunos sitios y hasta en un video de "locademy" (no se si está bien escrito), este comando
lo que hace es cambiar el orden en que reciben el foco algunos widgets, pero no funciona con este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
from tkinter import *
from tkcalendar import *
 
root=Tk()
root.title("Prueba de orden de los widgets")
root.geometry("550x550")
 
varfr = IntVar()
varfr.set("1")
 
vartdj = IntVar()
vartdj.set("2")
 
varfe = IntVar()
varfe.set("2")
 
fra1 = Frame(root)
fra1.pack(side="top", expand="Y", fill="both")
fra2 = Frame(fra1)
fra2.pack(side="bottom", expand="Y", fill="both")
fra3 = Frame(fra2)
fra3.pack(side="bottom", expand="Y", fill="both")
fra4 = Frame(fra3)
fra4.pack(side="bottom", expand="Y", fill="both")
fra5 = Frame(fra4)
fra5.pack(side="bottom", expand="Y", fill="both")
 
panerev = LabelFrame(fra1, text=" Label Frame 1 ", labelanchor="nw")
panerev.pack(side="left", expand="false", padx=10, pady=10, fill="both", ipadx=27)
 
panetdj = LabelFrame(fra1, text=" Label Frame 2 ", labelanchor="nw")
panetdj.pack(side="left", expand="false", padx=10, pady=10, fill="both", ipadx=14)
 
panefecha = LabelFrame(fra2, text=" Fechas ", labelanchor="nw")
panefecha.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
panefe = LabelFrame(fra2, text=" Forma de emisión ", labelanchor="n")
panefe.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
paneserie = LabelFrame(fra3, borderwidth=0, highlightthickness=0)
paneserie.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
panebutton = LabelFrame(fra4, borderwidth=0, highlightthickness=0)
panebutton.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
paneacier = LabelFrame(fra5, borderwidth=0, highlightthickness=0)
paneacier.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
radind = Radiobutton(panerev, text="Individual", variable=varfr, value="1")
radind.grid(row=1, column=0, sticky="w")
 
radgen = Radiobutton(panerev, text="General", variable=varfr, value="2")
radgen.grid(row=2, column=0, sticky="w")
 
radlot = Radiobutton(panetdj, text="radlot", variable=vartdj, value="1")
radlot.grid(row=1, column=0, sticky="w")
 
radqui = Radiobutton(panetdj, text="radqui", variable=vartdj, value="2")
radqui.grid(row=2, column=0, sticky="w")
 
lblDesde = Label(panefecha, text="Desde")
lblDesde.grid(row=1, column=0)
 
fdesde = DateEntry(panefecha, date_pattern="dd/mm/yyyy")
fdesde.grid(row=1, column=1, padx=10, pady=5)
 
lblHasta = Label(panefecha, text="Hasta")
lblHasta.grid(row=2, column=0)
 
fhasta = DateEntry(panefecha, date_pattern="dd/mm/yyyy")
fhasta.grid(row=2, column=1, padx=10, pady=5)
 
radres = Radiobutton(panefe, text="Resumido", variable=varfe, value="1")
radres.grid(row=1, column=0, sticky="w")
 
radeta = Radiobutton(panefe, text="Detallado", variable=varfe, value="2")
radeta.grid(row=2, column=0, sticky="w")
 
lblSerie = Label(paneserie, text="Serie")
lblSerie.grid(row=1, column=0)
 
txtSerie = Entry(paneserie, width=12)
txtSerie.grid(column=1, row=1, padx=5, pady=5)
 
btnSalir = Button(panebutton, text="Salir", width=10, command=root.destroy)
btnSalir.pack(side="left", padx=10)
 
widgets = [txtSerie, btnSalir, radind, radgen, radlot, radqui, fdesde, fhasta, radres, radeta]
for w in widgets:
    w.lift()
 
txtSerie.focus_set()
 
root.mainloop()

En este código tengo un Entry que llamé txtSerie, y recibe el foco al iniciar la aplicación, después según
lo que pongo un poco más arriba, debería ir al botón btnSalir, pero va al DateEntry fdesde. No está funcionando
según como lo definí. ¿ Cual es el error ?

Antonio
Sistemas
Resipol
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Lift() de tkinter no funciona como debería

Publicado por tincopasan (1082 intervenciones) el 19/03/2021 20:08:53
miré un poco el código, ¿Cuándo se supone que debe cambiar el foco? para este tipo de dudas es mejor poner un código simplificado, para que sea más fácil de leer
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar
sin imagen de perfil
Val: 17
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Lift() de tkinter no funciona como debería

Publicado por Antonio (6 intervenciones) el 19/03/2021 21:12:38
El foco lo tiene txtSerie. Si por ejemplo ingreso algo, cualquier cosa, y presiono la tecla <TAB> para pasar al siguiente widget, pasa al widget fdesde, cuando en realidad debería pasar al botón btnSalir. Voy a ver si lo puedo simplificar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Lift() de tkinter no funciona como debería

Publicado por tincopasan (1082 intervenciones) el 20/03/2021 06:47:57
la verdad es que el código en sí es bastante feo de leer, hay demasiados objetos mezclados, para lo que querés hacer no se necesita lift() ya que el evento TAB lo hace de por sí, modifique un poco tu código, solo como ejemplo funcional, eliminando lift y la chorrada de frames, solo para que te sirva de ejemplo de como podría funcionar.
Como comentario, anda viendo como usar clases y optimizar, además de hacer más legible el código.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from tkinter import *
from tkcalendar import *
 
root=Tk()
root.title("Prueba de orden de los widgets")
root.geometry("900x300")
 
varfr = IntVar()
varfr.set("1")
 
vartdj = IntVar()
vartdj.set("2")
 
varfe = IntVar()
varfe.set("2")
 
fra1 = Frame(root)
fra1.pack(side="top", expand="Y", fill="both")
 
panerev = LabelFrame(fra1, text=" Label Frame 1 ", labelanchor="nw")
panerev.pack(side="left", expand="false", padx=10, pady=10, fill="both", ipadx=27)
 
panetdj = LabelFrame(fra1, text=" Label Frame 2 ", labelanchor="nw")
panetdj.pack(side="left", expand="false", padx=10, pady=10, fill="both", ipadx=14)
 
panefecha = LabelFrame(fra1, text=" Fechas ", labelanchor="nw")
panefecha.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
panefe = LabelFrame(fra1, text=" Forma de emisión ", labelanchor="n")
panefe.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
paneserie = LabelFrame(fra1, borderwidth=0, highlightthickness=0)
paneserie.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
panebutton = LabelFrame(fra1, borderwidth=0, highlightthickness=0)
panebutton.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
paneacier = LabelFrame(fra1, borderwidth=0, highlightthickness=0)
paneacier.pack(side="left", expand="false", padx=10, pady=10, fill="both")
 
radind = Radiobutton(panerev, text="Individual", variable=varfr, value="1")
radind.grid(row=1, column=0, sticky="w")
 
radgen = Radiobutton(panerev, text="General", variable=varfr, value="2")
radgen.grid(row=2, column=0, sticky="w")
 
radlot = Radiobutton(panetdj, text="radlot", variable=vartdj, value="1")
radlot.grid(row=1, column=0, sticky="w")
 
radqui = Radiobutton(panetdj, text="radqui", variable=vartdj, value="2")
radqui.grid(row=2, column=0, sticky="w")
 
lblDesde = Label(panefecha, text="Desde")
lblDesde.grid(row=1, column=0)
 
fdesde = DateEntry(panefecha, date_pattern="dd/mm/yyyy")
fdesde.grid(row=1, column=1, padx=10, pady=5)
 
lblHasta = Label(panefecha, text="Hasta")
lblHasta.grid(row=2, column=0)
 
fhasta = DateEntry(panefecha, date_pattern="dd/mm/yyyy")
fhasta.grid(row=2, column=1, padx=10, pady=5)
 
radres = Radiobutton(panefe, text="Resumido", variable=varfe, value="1")
radres.grid(row=1, column=0, sticky="w")
 
radeta = Radiobutton(panefe, text="Detallado", variable=varfe, value="2")
radeta.grid(row=2, column=0, sticky="w")
 
lblSerie = Label(paneserie, text="Serie")
lblSerie.grid(row=1, column=0)
 
txtSerie = Entry(paneserie, width=12)
txtSerie.grid(column=1, row=1, padx=5, pady=5)
txtSerie.focus_set()
 
btnSalir = Button(panebutton, text="Salir", width=10, command=root.destroy)
btnSalir.pack(side="left", padx=10)
 
root.mainloop()

no quedó organizado como antes, pero eso te toca a vos, no quiero escribir de más.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Lift() de tkinter no funciona como debería

Publicado por Antonio (6 intervenciones) el 20/03/2021 21:29:14
Bueno Gracias. El tema es el siguiente. Empecé con Python hará 2 meses. Vengo de un lenguaje parecido (parecido no igual) a Visual Foxpro, el lenguaje es OOHG, a su vez OOHG está armado con Harbour y Harbour viene de Clipper, un lenguaje que se usaba en la década del 80 y principios de los 90, y la verdad que me está costando bastante el tema de acostumbrarme a usar clases y de como ubicar los elementos en la pantalla, Esto viene a lo que decís de que "no quedó organizado como antes...", lo armé así porqué empecé a probar de una y otra forma, hasta que encontré una que quedó como quería que aparecieran en pantalla, sin contar con el inconveniente de que pasara de un control a otro en el orden que quería..., bueno al márgen de la parte "histórica" que relaté de los lenguajes que usé, de nuevo Gracias y voy a seguir buscando de como poner los elementos tal como los tenía antes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar