Reorientación del orden de tabulación en tkinter
Resuelto
Baldo35
Mensajes publicados
14
Estado
Miembro
-
Baldo35 Mensajes publicados 14 Estado Miembro -
Baldo35 Mensajes publicados 14 Estado Miembro -
Hola a todos,
en la serie: buscando se avanza, intento cambiar el orden de las tabulaciones en Tkinter.
En mi código:
en las líneas 40 a 45 de la función <touche_tabulation> me gustaría realizar una reasignación del enfoque, pero el <if> de la línea 44 nunca es verdadero.
Además, traté de cambiar la asignación del enfoque en la misma función y no funciona.
¿Puedes ayudarme a resolver este enigma?
Gracias de antemano
en la serie: buscando se avanza, intento cambiar el orden de las tabulaciones en Tkinter.
En mi código:
#-------------------------------------------------------------------------------
# Nombre: FrancsEuros.py
# Propósito: Una conversión de Francos a Euros o de Euros a Francos fácil
#
# Autor: BALDONI GUY
#
# Creado: 07/09/2020
# Copyright: (c) BALDONI GUY 2020
# Licencia: <su licencia>
#-------------------------------------------------------------------------------
# coding: utf8
from tkinter import *
import tkinter.messagebox
from PIL import ImageTk, Image
import pygame
import os
import winsound
from time import *
from time import gmtime, strftime, sleep
import locale
import time
import datetime
from math import *
from winsound import *
# Para la fecha en francés
locale.setlocale(locale.LC_TIME,'')
# Definición de frecuencia y duración de los beep de winsound
frequency = 2500 # Establecer Frecuencia a 2500 Hertz
duration = 500 # Establecer Duración a 500 ms == 1/2 segundo
# Definición de una fuente tachada y no tachada
fontbarre = "-family {DejaVu Sans} -size 8 -weight normal -underline 0 -overstrike 1"
fontnormal = "-family {DejaVu Sans} -size 8 -weight normal -underline 0 -overstrike 0"
def touche_clav(event):
btn_effacer["state"] = "normal"
def touche_tabulation(event):
print('Usted presionó la tecla de tabulación')
print(root.focus_get())
print(Francs.focus_get())
if Francs.focus_get() == '.!button2' :
print('Enfoque en Botón2')
#*******************************************************************************
# MÚSICA
# Función de elección con o sin música
def choix_musique():
global compteur
if btn_couperMusique['font'] == fontbarre:
btn_couperMusique['font'] = fontnormal
couper_musique()
else:
btn_couperMusique['font'] = fontbarre
jouer_musique('oiseau.wav')
compteur = 0
# Se reproduce una pequeña música
def jouer_musique(nom_musique):
pygame.mixer.init()
pygame.mixer.music.load(nom_musique)
pygame.mixer.music.play()
# Función para detener la música
def couper_musique():
pygame.mixer.music.stop()
#*******************************************************************************
#*******************************************************************************
# Función para destruir la ventana principal tras un evento del teclado
def exit(event):
root.destroy()
#*******************************************************************************
#*******************************************************************************
# Función para elegir un modo Francos->Euros o Euros->Francos
def switch_feef():
# Se borran los dos campos de entrada
Euros.delete(0 , END)
Francs.delete(0 , END)
if btn_ch_mode["text"] == "Francos -> Euros" :
btn_ch_mode["text"] = "Euros -> Francos"
root.title("Conversión actual Francos->Euros")
Francs.focus_set()
else:
btn_ch_mode["text"] = "Francos -> Euros"
root.title("Conversión actual Euros->Francos")
Euros.focus_set()
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Se realiza la conversión
def convert(event):
# Si se rellenan Francos y Euros y estamos en modo Francos -> Euros
# el usuario quiere hacer otro cálculo entonces, volvemos a calcular
if ((Francs.get() != "") and (Euros.get() != "")) and btn_ch_mode["text"] == "Euros -> Francos":
try :
tmp = float(Francs.get()) * 0.1524
except :
tkinter.messagebox.showerror('Francos', '( ' + Francs.get() +' )' + ' no es una suma correcta')
Francs.insert(0, 'Entrada incorrecta')
winsound.Beep(frequency, duration)
btn_effacer["state"] = "normal"
effacer()
else :
round = float("%0.2f" % tmp)
strround = str(round)
Euros.delete(0 , END)
Euros.insert(0, strround + ' €')
# Si se rellenan Francos y Euros y estamos en modo Euros -> Francos
# el usuario quiere hacer otro cálculo entonces, volvemos a calcular
elif ((Francs.get() != "") and (Euros.get() != "")) and btn_ch_mode["text"] == "Francos -> Euros":
try :
tmp = float(Euros.get()) * 6.5596
except :
tkinter.messagebox.showerror('Euros', '( ' + Euros.get() +' )' + ' no es una suma correcta')
winsound.Beep(frequency, duration)
btn_effacer["state"] = "normal"
effacer()
Euros.insert(0, 'Entrada incorrecta')
else :
round = float("%0.2f" % tmp)
strround = str(round)
Francs.delete(0 , END)
Francs.insert(0, strround + ' F')
# De lo contrario funcionamiento normal
else :
x = Francs.get()
y = Euros.get()
# Si Francos y Euros están vacíos, el botón Borrar está deshabilitado
if (x == "") and (y == ""):
btn_effacer["state"] = "disabled"
else:
btn_effacer["state"] = "normal"
if (x != "" ) and (y == ""):
# Verificación de la correcta entrada de Francos
try :
tmp = float(x) * 0.1524
except :
# Se borra el campo Francos y se muestra el error
Francs.delete(0 , END)
Francs.insert(0, 'Entrada incorrecta')
winsound.Beep(frequency, duration)
tkinter.messagebox.showerror('Francos', '( ' + x +' )' + ' no es una suma correcta')
else :
# Está bien entonces se muestra el resultado
round = float("%0.2f" % tmp)
strround = str(round)
Euros.delete(0 , END)
Euros.insert(0, strround + ' €')
Francs.focus_set()
elif (y != "") and (x == ""):
# Verificación de la correcta entrada de Euros
try :
tmp = float(y) * 6.5596
except :
# Se borra el campo Euros y se muestra el error
Euros.delete(0 , END)
Euros.insert(0, 'Entrada incorrecta')
winsound.Beep(frequency, duration)
tkinter.messagebox.showerror('Euros', '( ' + y +' )' + ' no es una suma correcta')
else :
# Está bien entonces se muestra el resultado
round = float("%0.2f" % tmp)
strround = str(round)
Francs.delete(0 , END)
Francs.insert(0, strround + ' F')
Euros.focus_set()
#*******************************************************************************
#*******************************************************************************
# Borra los dos campos de entrada y deshabilita el botón Borrar
def effacer():
# Se borran los dos campos de entrada
Euros.delete(0 , END)
Francs.delete(0 , END)
# El botón Borrar está deshabilitado
btn_effacer["state"] = "disabled"
# El cursor parpadea en el campo Francos
Francs.focus_set()
root.title("Conversión actual Francos->Euros")
#*******************************************************************************
# Mostrar una ventana Acerca de
def aff_infos(e) :
btn_effacer["state"] = "normal"
feninf = Toplevel()
feninf.config(bg='lightblue')
geo1=root.winfo_geometry()
geox=root.winfo_rootx()
geoy=root.winfo_rooty()
feninf.geometry("300x260+"+str(geox-50)+"+"+str(geoy-22))
feninf.title("Acerca de FrancsEuros")
feninf.resizable(height = False, width = False)
labinf=Label(feninf, bg='lightblue',fg='black',width=50,font=('Arial', 9),
text= "\nFrancseuros v1.0\n\n"
"Programa escrito en Python / Tkinter\n"
"y distribuidos bajo licencia GNU GPL.\n\n"
"© 2020 Guy Baldoni\n"
"( )\n\n"
"Este programa propone una conversión \n"
"Francos Euros o Euros Francos fácil ! \n"
"\n"
" ")
labinf.pack(pady=5)
bouf3=Button(feninf, text="Cerrar", command=feninf.destroy, fg='blue', relief=RAISED)
bouf3.pack(side=BOTTOM,pady=10)
feninf.grab_set()
feninf.wait_window()
#*******************************************************************************
# Ventana principal
root = Tk()
root.geometry("430x160")
#*******************************************************************************
# Mostrar la fecha actual actualizada permanentemente
global compteur
compteur = 0
text = StringVar()
heure_syst = Label(root,fg = 'blue',textvariable = text)
heure_syst.pack(side = TOP)
def majheure():
if ((Francs.get() == "") and (Euros.get() == "")):
btn_effacer["state"] = "disabled"
# Si el cursor parpadea en el campo Francos actualización coherente
if str(root.focus_get()) == '.!entry' :
btn_ch_mode["text"] = "Euros -> Francos"
root.title("Conversión actual Francos->Euros")
# Si el cursor parpadea en el campo Euros actualización coherente
elif str(root.focus_get()) == '.!entry2' :
btn_ch_mode["text"] = "Francos -> Euros"
root.title("Conversión actual Euros->Francs")
Euros.focus_set()
global compteur
if btn_couperMusique['font'] == fontbarre:
compteur = compteur + 1
if btn_couperMusique['font'] == fontbarre and compteur > 540:
btn_couperMusique['font'] = fontnormal
compteur = 0
# Comando que recuerda la función majheure después de 300ms
time.sleep(0.3)
root.after(50,majheure)
text.set(time.strftime("%A %d %B %Y %H:%M:%S"))
root.after(50, majheure)
#*******************************************************************************
jouer_musique('oiseau.wav')
# Mostrar un pequeño logo en la ventana
img = ImageTk.PhotoImage(Image.open('h.gif'))
panel = Label(root, image = img)
panel.place(x = 10, y = 10)
# Prueba de color
#root.configure(bg='cyan')
# Coloca la aplicación en el centro de la pantalla
x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
root.geometry("+%d+%d" % (x, y))
# Definición del título de la aplicación al inicio
root.title("Conversión actual Francos->Euros")
# Prohibir el agrandamiento de la ventana
root.resizable(height = False, width = False)
root.event_delete
root.size()
#*******************************************************************************
#*******************************************************************************
# Botones, etiquetas y campos de entrada
#*******************************************************************************
#*******************************************************************************
# Botón para detener la música
btn_couperMusique = Button(root, text="Canciones", fg ='blue', command = choix_musique, relief=RAISED)
btn_couperMusique.place(x = 20, y = 125)
btn_couperMusique['font'] = fontbarre
#*******************************************************************************
#*******************************************************************************
# Botón para cambiar la conversión Francos->Euros o Euros->Francos así como su etiqueta
mode = Label(root,text="Elección del modo ->")
mode.place(x = 230, y = 30)
btn_ch_mode = Button(root, text="Euros -> Francos", fg ='blue', command = switch_feef , relief = RAISED)
btn_ch_mode.place ( x = 330, y = 25)
#*******************************************************************************
#*******************************************************************************
# Entrada del campo Francos
lblFrancs = Label(root,text="Suma en Francos : ")
lblFrancs.place(x = 110, y = 20)
Francs = Entry(root, width = 15)
Francs.place( x = 120, y = 40)
# El cursor parpadea en el campo Francos
Francs.focus_set()
#*******************************************************************************
#*******************************************************************************
# Entrada del campo Euros
lblEuros = Label(root,text="Suma en Euros : ")
Euros = Entry(root, width = 15 )
lblEuros.place(x = 110, y = 60)
Euros.place(x = 120, y = 80)
#*******************************************************************************
#*******************************************************************************
# Se crea el botón Borrar
btn_effacer = Button(root, text="Borrar", fg ='blue', command = effacer, relief = RAISED)
btn_effacer.place(x = 230, y = 60)
# Por defecto el botón Borrar está deshabilitado porque no hay nada que borrar
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Se crea el botón Salir
bouton2 = Button(root, text="Salir", fg ='blue', command = root.destroy, relief = RAISED)
bouton2.place(x = 375, y = 130)
#*******************************************************************************
#*******************************************************************************
# Etiqueta de las instrucciones
modeEmploi = Label(root,text="Enter para calcular,\nQ o Esc para salir\n H--> Acerca de...")
modeEmploi.place( x = 100, y = 100)
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
# Detección de cualquier tecla del teclado, de la tecla Enter Esc o Q
root.bind('<Tab>', touche_tabulation)
root.bind('<Key>', touche_clav)
root.bind('<Return>', convert)
root.bind("<Escape>", exit)
root.bind("q", exit)
root.bind("Q", exit)
root.bind('h',aff_infos)
root.bind('H',aff_infos)
root.mainloop()
# Cuando se sale del programa, detenemos la música y decimos adiós
couper_musique()
jouer_musique('aurevoir.wav')
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
en las líneas 40 a 45 de la función <touche_tabulation> me gustaría realizar una reasignación del enfoque, pero el <if> de la línea 44 nunca es verdadero.
Además, traté de cambiar la asignación del enfoque en la misma función y no funciona.
¿Puedes ayudarme a resolver este enigma?
Gracias de antemano
7 respuestas
-
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención Ambassadeur 1 588
Hola, ¿podrías especificar "python" en las etiquetas de código cuando compartas python, como se explicó: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
además, podremos ayudarte más fácilmente si simplificas tu programa, manteniendo solo la parte relacionada con las tabulaciones de tkinter. -
Gracias por tu esfuerzo yg_be.
Aquí está el código Python 3.8.5 depurado :#-------------------------------------------------------------------------------
# Nombre: FrancsEuros.py
# Propósito: Una conversión fácil de Francos a Euros o de Euros a Francos
#
# Autor: BALDONI GUY
#
# Creado: 07/09/2020
# Copyright: (c) BALDONI GUY 2020
# Licencia: <tu licencia>
#-------------------------------------------------------------------------------
# coding: utf8
from tkinter import *
import tkinter.messagebox
import os
import winsound
import datetime
from math import *
from winsound import *
# Definición de frecuencia y duración de los sonidos de winsound
frequency = 2500 # Establecer frecuencia a 2500 Hertz
duration = 500 # Establecer duración a 500 ms == 1/2 segundo
# Definición de una fuente tachada y no tachada
fontbarre = "-family {DejaVu Sans} -size 8 -weight normal -underline 0 -overstrike 1"
fontnormal = "-family {DejaVu Sans} -size 8 -weight normal -underline 0 -overstrike 0"
def touche_clav(event):
btn_effacer["state"] = "normal"
def touche_tabulation(event):
print('Has presionado la tecla tabulación')
print(root.focus_get())
print(Francs.focus_get())
if Francs.focus_get() == '.!button2' :
print('Enfocado en Botón2')
#*******************************************************************************
# Función para destruir la ventana principal tras un evento de teclado
def exit(event):
root.destroy()
#*******************************************************************************
#*******************************************************************************
# Función para elegir un modo Francos->Euros o Euros->Francos
def switch_feef():
# Limpiamos ambos campos de entrada
Euros.delete(0 , END)
Francs.delete(0 , END)
if btn_ch_mode["text"] == "Francos -> Euros" :
btn_ch_mode["text"] = "Euros -> Francos"
root.title("Conversión actual Francos->Euros")
Francs.focus_set()
else:
btn_ch_mode["text"] = "Francos -> Euros"
root.title("Conversión actual Euros->Francos")
Euros.focus_set()
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Limpia ambos campos de entrada y desactiva el botón Limpiar
def effacer():
# Limpiamos ambos campos de entrada
Euros.delete(0 , END)
Francs.delete(0 , END)
# El botón Limpiar está desactivado
btn_effacer["state"] = "disabled"
# El cursor parpadea en el campo Francos
Francs.focus_set()
root.title("Conversión actual Francos->Euros")
# Ventana principal
root = Tk()
root.geometry("430x160")
# Prueba de color
#root.configure(bg='cyan')
# Coloca la aplicación en el centro de la pantalla
x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
root.geometry("+%d+%d" % (x, y))
# Definición del título de la aplicación al inicio
root.title("Conversión actual Francos->Euros")
# Impide el agrandamiento de la ventana
root.resizable(height = False, width = False)
root.event_delete
root.size()
#*******************************************************************************
#*******************************************************************************
# Botones, etiquetas y campos de entrada
#*******************************************************************************
#*******************************************************************************
# Botón para cambiar la conversión Francos->Euros o Euros->Francos y su etiqueta
mode = Label(root,text="Elección del modo ->")
mode.place(x = 230, y = 30)
btn_ch_mode = Button(root, text="Euros -> Francos", fg ='blue', command = switch_feef , relief = RAISED)
btn_ch_mode.place ( x = 330, y = 25)
#*******************************************************************************
#*******************************************************************************
# Entrada del campo Francos
lblFrancs = Label(root,text="Cantidad en Francos : ")
lblFrancs.place(x = 110, y = 20)
Francs = Entry(root, width = 15)
Francs.place( x = 120, y = 40)
# El cursor parpadea en el campo Francos
Francs.focus_set()
#*******************************************************************************
#*******************************************************************************
# Entrada del campo Euros
lblEuros = Label(root,text="Cantidad en Euros : ")
Euros = Entry(root, width = 15 )
lblEuros.place(x = 110, y = 60)
Euros.place(x = 120, y = 80)
#*******************************************************************************
#*******************************************************************************
# Se crea el botón Limpiar
btn_effacer = Button(root, text="Limpiar", fg ='blue', command = effacer, relief = RAISED)
btn_effacer.place(x = 230, y = 60)
# Por defecto el botón Limpiar está deshabilitado porque no hay nada que limpiar
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Se crea el botón Salir
bouton2 = Button(root, text="Salir", fg ='blue', command = root.destroy, relief = RAISED)
bouton2.place(x = 375, y = 130)
#*******************************************************************************
#*******************************************************************************
# Etiqueta del manual de usuario
modeEmploi = Label(root,text="Enter para calcular,\nQ o Esc para salir\n H--> Acerca de...")
modeEmploi.place( x = 100, y = 100)
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
# Detección de cualquier tecla del teclado, de la tecla Enter Esc o Q
root.bind('<Tab>', touche_tabulation)
root.bind('<Key>', touche_clav)
root.bind("<Escape>", exit)
root.bind("q", exit)
root.bind("Q", exit)
root.mainloop()
# Al salir del programa, detenemos la música y decimos adiós
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
siempre me interesa la función <touche_tabulation> que me preocupa.
Gracias de nuevo a todos los que me responderán. -
yg_be Mensajes publicados 23437 Fecha de registro Estado Colaborador Última intervención Ambassadeur 1 588
je répète ma demande: peux-tu préciser "python" dans les balises de code quand tu partages du python, comme expliqué ici: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
je n'ai pas bien compris ce que tu voulais faire. tu n'expliques pas le comportement attendu ni le comportement obtenu.
ceci fonctionnera peut-être mieux:if str(Francs.focus_get()) == '.!button2' :
-
Gracias yg_be por tu paciencia, estoy aprendiendo.
Mi código :<code python>
#-------------------------------------------------------------------------------
# Nombre: FrancsEuros.py
# Propósito: Una conversión fácil de Francos a Euros o de Euros a Francos
#
# Autor: BALDONI GUY
#
# Creado: 07/09/2020
# Copyright: (c) BALDONI GUY 2020
# Licencia: <tu licencia>
#-------------------------------------------------------------------------------
# coding: utf8
from tkinter import *
import os
from math import *
def touche_clav(event):
btn_effacer["state"] = "normal"
def touche_tabulation(event):
print('Has presionado la tecla de tabulación')
print(root.focus_get())
if str(Francs.focus_get()) == '.!button2' :
print('Enfoque en Botón2')
#*******************************************************************************
# Función para destruir la ventana principal tras un evento de teclado
def exit(event):
root.destroy()
#*******************************************************************************
#*******************************************************************************
# Función para elegir un modo Francos->Euros o Euros->Francos
def switch_feef():
# Limpiamos los dos campos de entrada
Euros.delete(0 , END)
Francs.delete(0 , END)
if btn_ch_mode["text"] == "Francos -> Euros" :
btn_ch_mode["text"] = "Euros -> Francos"
root.title("Conversión actual Francos->Euros")
Francs.focus_set()
else:
btn_ch_mode["text"] = "Francos -> Euros"
root.title("Conversión actual Euros->Francos")
Euros.focus_set()
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Limpia los dos campos de entrada y desactiva el botón Limpiar
def effacer():
# Limpiamos los dos campos de entrada
Euros.delete(0 , END)
Francs.delete(0 , END)
# El botón Limpiar está desactivado
btn_effacer["state"] = "disabled"
# El cursor parpadea en el campo Francos
Francs.focus_set()
root.title("Conversión actual Francos->Euros")
# Ventana principal
root = Tk()
root.geometry("430x160")
# Definición del título de la aplicación al inicio
root.title("Conversión actual Francos->Euros")
# Prohibir el agrandamiento de la ventana
root.resizable(height = False, width = False)
root.event_delete
root.size()
#*******************************************************************************
#*******************************************************************************
# Botones, etiquetas y campos de entrada
#*******************************************************************************
#*******************************************************************************
# Botón para cambiar la conversión de Francos->Euros o Euros->Francos así como su etiqueta
mode = Label(root,text="Elección del modo ->")
mode.place(x = 230, y = 30)
btn_ch_mode = Button(root, text="Euros -> Francos", fg ='blue', command = switch_feef , relief = RAISED)
btn_ch_mode.place ( x = 330, y = 25)
#*******************************************************************************
#*******************************************************************************
# Entrada del campo Francos
lblFrancs = Label(root,text="Suma en Francos : ")
lblFrancs.place(x = 110, y = 20)
Francs = Entry(root, width = 15)
Francs.place( x = 120, y = 40)
# El cursor parpadea en el campo Francos
Francs.focus_set()
#*******************************************************************************
#*******************************************************************************
# Entrada del campo Euros
lblEuros = Label(root,text="Suma en Euros : ")
Euros = Entry(root, width = 15 )
lblEuros.place(x = 110, y = 60)
Euros.place(x = 120, y = 80)
#*******************************************************************************
#*******************************************************************************
# El botón Limpiar se crea desactivado porque no hay nada que limpiar
btn_effacer = Button(root, text="Limpiar", fg ='blue', state = 'disabled',command = effacer, relief = RAISED)
btn_effacer.place(x = 230, y = 60)
#*******************************************************************************
#*******************************************************************************
# El botón Salir se crea
bouton2 = Button(root, text="Salir", fg ='blue', command = root.destroy, relief = RAISED)
bouton2.place(x = 375, y = 130)
#*******************************************************************************
#*******************************************************************************
# Detección de cualquier tecla del teclado, de la tecla Enter Escape o Q
root.bind('<Tab>', touche_tabulation)
root.bind('<Key>', touche_clav)
root.bind("<Escape>", exit)
root.bind("q", exit)
root.bind("Q", exit)
root.mainloop()
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
</code>
En realidad, cuando se presiona tabulador varias veces, el enfoque pasa por
los campos de entrada y luego por los botones.
Quisiera que pasáramos de un campo a otro sin pasar por los botones.
Gracias por tu comprensión.
Baldo35 -
Hola Baldo,
¡Todavía no!
Debe parecerse a esto:# coding: utf8 from tkinter import * import os from math import * def toque_teclado(event): btn_borrar["state"] = "normal" def toque_tabulacion(event): print('Has presionado la tecla de tabulación') print(root.focus_get()) if str(Francs.focus_get()) == '.!button2' : print('Enfoque en Botón2')-
Hola Phil,
el código que me das funciona bien, pero me gustaría:
De hecho, cuando se presiona la tecla de tabulación varias veces, el foco pasa
por los campos de entrada y luego por los botones.
Me gustaría que se pasara de un campo a otro sin pasar por los botones.
Gracias por tu comprensión.
Baldo35
-
-
No te he dado un código que funcione bien
Te he puesto las 14 primeras líneas de tu código con las etiquetas de código colocadas correctamente
para que veas a qué debe parecerse exactamente
Así que tienes que volver a poner tu código completo con las etiquetas, debe aparecer exactamente
como en mi ejemplo, con los colores, las indentaciones y todo...-
Mil disculpas Phil,
estoy intentando:#------------------------------------------------------------------------------- # Nombre: FrancsEuros.py # Propósito: Una conversión fácil de Francos a Euros o de Euros a Francos # # Autor: BALDONI GUY # # Creado: 07/09/2020 # Copyright: (c) BALDONI GUY 2020 # Licencia: <tu licencia> #------------------------------------------------------------------------------- # coding: utf8 from tkinter import * import os from math import * def touche_clav(event): btn_effacer["state"] = "normal" def touche_tabulation(event): print('Has presionado la tecla tabulación') print(root.focus_get()) if str(Francs.focus_get()) == '.!entry2' : print('Enfoque en Botón3') Francs.focus_set() #******************************************************************************* # Función para destruir la ventana principal tras un evento de teclado def exit(event): root.destroy() #******************************************************************************* #******************************************************************************* # Función para elegir un modo Francos->Euros o Euros->Francos def switch_feef(): # Limpiamos los dos campos de entrada Euros.delete(0 , END) Francs.delete(0 , END) if btn_ch_mode["text"] == "Francos -> Euros" : btn_ch_mode["text"] = "Euros -> Francos" root.title("Conversión actual Francos->Euros") Francs.focus_set() else: btn_ch_mode["text"] = "Francos -> Euros" root.title("Conversión actual Euros->Francos") Euros.focus_set() btn_effacer["state"] = "disabled" #******************************************************************************* #******************************************************************************* # Limpia los dos campos de entrada y desactiva el botón Borrar def effacer(): # Limpiamos los dos campos de entrada Euros.delete(0 , END) Francs.delete(0 , END) # El botón Borrar está deshabilitado btn_effacer["state"] = "disabled" # El cursor parpadea en el campo Francs Francs.focus_set() root.title("Conversión actual Francos->Euros") # Ventana principal root = Tk() root.geometry("430x160") # Definición del título de la aplicación al principio root.title("Conversión actual Francos->Euros") # Impedir el agrandamiento de la ventana root.resizable(height = False, width = False) root.event_delete root.size() #******************************************************************************* #******************************************************************************* # Botones, etiquetas y campos de entrada #******************************************************************************* #******************************************************************************* # Botón de cambio de conversión Francos->Euros o Euros->Francos junto con su etiqueta mode = Label(root,text="Selección del modo ->") mode.place(x = 230, y = 30) btn_ch_mode = Button(root, text="Euros -> Francos", fg ='blue', command = switch_feef , relief = RAISED) btn_ch_mode.place ( x = 330, y = 25) #******************************************************************************* #******************************************************************************* # Entrada del campo Francs lblFrancs = Label(root,text="Suma en Francos : ") lblFrancs.place(x = 110, y = 20) Francs = Entry(root, width = 15) Francs.place( x = 120, y = 40) # El cursor parpadea en el campo Francs Francs.focus_set() #******************************************************************************* #******************************************************************************* # Entrada del campo Euros lblEuros = Label(root,text="Suma en Euros : ") Euros = Entry(root, width = 15 ) lblEuros.place(x = 110, y = 60) Euros.place(x = 120, y = 80) #******************************************************************************* #******************************************************************************* # El botón Borrar se crea deshabilitado porque no hay nada que borrar btn_effacer = Button(root, text="Borrar", fg ='blue', state = 'disabled',command = effacer, relief = RAISED) btn_effacer.place(x = 230, y = 60) #******************************************************************************* #******************************************************************************* # El botón Salir se crea botón2 = Button(root, text="Salir", fg ='blue', command = root.destroy, relief = RAISED) botón2.place(x = 375, y = 130) #******************************************************************************* #******************************************************************************* # Detección de cualquier tecla del teclado, de la tecla Enter Escape o Q root.bind('<Tab>', touche_tabulation) root.bind('<Key>', touche_clav) root.bind("<Escape>", exit) root.bind("q", exit) root.bind("Q", exit) root.mainloop() #******************************************************************************* #******************************************************************************* #*******************************************************************************
Espero que esta vez sea bueno.
Entonces, querría que la tecla <Tabulación> pase de un campo de entrada a otro evitando ir a
los botones.
Muchas gracias por tu paciencia.
Baldo35- primero explicaste que querías cambiar el orden de las tabulaciones.
luego explicas que quieres evitar ir a los botones.
de qué se trata precisamente? gracias por tomarte el tiempo para explicarte claramente.
si quieres excluir el widget botón2 de la secuencia de tabulación:botón2.config(takefocus=False)
-
-
Hola,
el problema con el if está resuelto.
Pero todavía no consigo forzar el enfoque en mi campo de entrada cuando se activa la tabulación (el enfoque pasa inevitablemente a los botones).
Gracias