Réorientation de l'ordre des tabulations tkinter
Résolu/Fermé
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
-
17 sept. 2020 à 17:11
Baldo35 Messages postés 13 Date d'inscription lundi 31 août 2020 Statut Membre Dernière intervention 18 septembre 2020 - 18 sept. 2020 à 17:14
Baldo35 Messages postés 13 Date d'inscription lundi 31 août 2020 Statut Membre Dernière intervention 18 septembre 2020 - 18 sept. 2020 à 17:14
Bonjour à tous,
dans la série : c'est en cherchant que l'on progresse, je cherche à changer l'ordre des tabulations Tkinter.
Dans mon code :
au niveau des lignes 40 à 45 dans la fonction <touche_tabulation> je voudrais effectuer une réaffectation du focus mais le <if> de la ligne 44 n'est jamais vrai.
D'autre part, j'ai essayé de changer l'affectation du focus dans la même fonction et ça ne fonctionne pas.
Pouvez-vous m'aider à résoudre cette énigme ?
Merci par avance
dans la série : c'est en cherchant que l'on progresse, je cherche à changer l'ordre des tabulations Tkinter.
Dans mon code :
#-------------------------------------------------------------------------------
# Name: FrancsEuros.py
# Purpose: Une conversion Francs Euros ou Euros Francs facile
#
# Author: BALDONI GUY
#
# Created: 07/09/2020
# Copyright: (c) BALDONI GUY 2020
# Licence: <your licence>
#-------------------------------------------------------------------------------
# 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 *
# Pour la date en français
locale.setlocale(locale.LC_TIME,'')
# Définition fréquence et durée des beep de winsound
frequency = 2500 # Set Frequency To 2500 Hertz
duration = 500 # Set Duration To 500 ms == 1/2 second
# Définition d'une fonte barrée et non barrée
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('Vous avez appuyez sur la touche tabulation')
print(root.focus_get())
print(Francs.focus_get())
if Francs.focus_get() == '.!button2' :
print('Focus sur Bouton2')
#*******************************************************************************
# MUSIQUE
# Fonction de choix avec ou sans musique
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
# On joue une petite musique
def jouer_musique(nom_musique):
pygame.mixer.init()
pygame.mixer.music.load(nom_musique)
pygame.mixer.music.play()
# Fonction d'arrêt de la musique
def couper_musique():
pygame.mixer.music.stop()
#*******************************************************************************
#*******************************************************************************
# Fonction de destruction de la fenêtre principale suite à un événement clavier
def exit(event):
root.destroy()
#*******************************************************************************
#*******************************************************************************
# Fonction de choix d'un mode Francs->Euros ou Euros->Francs
def switch_feef():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
if btn_ch_mode["text"] == "Francs -> Euros" :
btn_ch_mode["text"] = "Euros -> Francs"
root.title("Conversion actuelle Francs->Euros")
Francs.focus_set()
else:
btn_ch_mode["text"] = "Francs -> Euros"
root.title("Conversion actuelle Euros->Francs")
Euros.focus_set()
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# On effectue la conversion
def convert(event):
# Si Francs et Euros sont remplis et que nous sommes en mode Francs -> Euros
# l'utilisateur veut faire un autre calcul alors, on refait le calcul
if ((Francs.get() != "") and (Euros.get() != "")) and btn_ch_mode["text"] == "Euros -> Francs":
try :
tmp = float(Francs.get()) * 0.1524
except :
tkinter.messagebox.showerror('Francs', '( ' + Francs.get() +' )' + ' n\'est pas une somme correcte')
Francs.insert(0, 'Saisie incorrecte')
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 Francs et Euros sont remplis et que nous sommes en mode Euros -> Francs
# l'utilisateur veut faire un autre calcul alors, on refait le calcul
elif ((Francs.get() != "") and (Euros.get() != "")) and btn_ch_mode["text"] == "Francs -> Euros":
try :
tmp = float(Euros.get()) * 6.5596
except :
tkinter.messagebox.showerror('Euros', '( ' + Euros.get() +' )' + ' n\'est pas une somme correcte')
winsound.Beep(frequency, duration)
btn_effacer["state"] = "normal"
effacer()
Euros.insert(0, 'Saisie incorrecte')
else :
round = float("%0.2f" % tmp)
strround = str(round)
Francs.delete(0 , END)
Francs.insert(0, strround + ' F')
# Sinon fonctionnement normal
else :
x = Francs.get()
y = Euros.get()
# Si Francs et Euros sont vides le bouton Effacer est grisé
if (x == "") and (y == ""):
btn_effacer["state"] = "disabled"
else:
btn_effacer["state"] = "normal"
if (x != "" ) and (y == ""):
# Vérification de la bonne saisie de Francs
try :
tmp = float(x) * 0.1524
except :
# On efface le champ Francs et on affiche l'erreur
Francs.delete(0 , END)
Francs.insert(0, 'Saisie incorrecte')
winsound.Beep(frequency, duration)
tkinter.messagebox.showerror('Francs', '( ' + x +' )' + ' n\'est pas une somme correcte')
else :
# C'est bon alors on affiche le résultat
round = float("%0.2f" % tmp)
strround = str(round)
Euros.delete(0 , END)
Euros.insert(0, strround + ' €')
Francs.focus_set()
elif (y != "") and (x == ""):
# Vérification de la bonne saisie d'Euros
try :
tmp = float(y) * 6.5596
except :
# On efface le champ Euros et on affiche l'erreur
Euros.delete(0 , END)
Euros.insert(0, 'Saisie incorrecte')
winsound.Beep(frequency, duration)
tkinter.messagebox.showerror('Euros', '( ' + y +' )' + ' n\'est pas une somme correcte')
else :
# C'est bon alors on affiche le résultat
round = float("%0.2f" % tmp)
strround = str(round)
Francs.delete(0 , END)
Francs.insert(0, strround + ' F')
Euros.focus_set()
#*******************************************************************************
#*******************************************************************************
# Efface les deux champs de saisie et grise le bouton Effacer
def effacer():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
# Le bouton Effacer est grisé
btn_effacer["state"] = "disabled"
# Le curseur clignote dans le champ Francs
Francs.focus_set()
root.title("Conversion actuelle Francs->Euros")
#*******************************************************************************
# Affichage d'une fenêtre A propos
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("À propos 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"
"Programme écrit en Python / Tkinter\n"
"et distribué sous licence GNU GPL.\n\n"
"© 2020 Guy Baldoni\n"
"( )\n\n"
"Ce programme propose une conversion \n"
"Francs Euros ou Euros Francs facile ! \n"
"\n"
" ")
labinf.pack(pady=5)
bouf3=Button(feninf, text="Fermer", command=feninf.destroy, fg='blue', relief=RAISED)
bouf3.pack(side=BOTTOM,pady=10)
feninf.grab_set()
feninf.wait_window()
#*******************************************************************************
# Fenêtre principale
root = Tk()
root.geometry("430x160")
#*******************************************************************************
# Affichage de la date courante mise à jour en permanence
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 le curseur clignote dans le champ Francs mise à jour cohérente
if str(root.focus_get()) == '.!entry' :
btn_ch_mode["text"] = "Euros -> Francs"
root.title("Conversion actuelle Francs->Euros")
# Si le curseur clignote dans le champ Euros mise à jour cohérente
elif str(root.focus_get()) == '.!entry2' :
btn_ch_mode["text"] = "Francs -> Euros"
root.title("Conversion actuelle 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
# Commande qui rappelle la fonction majheure après 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')
# Affichage d'un petit logo dans la fenêtre
img = ImageTk.PhotoImage(Image.open('h.gif'))
panel = Label(root, image = img)
panel.place(x = 10, y = 10)
# Test de mise en couleur
#root.configure(bg='cyan')
# Place l'application au centre de l'écran
x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
root.geometry("+%d+%d" % (x, y))
# Définition du titre de l'application au départ
root.title("Conversion actuelle Francs->Euros")
# Interdire l'agrandissement de la fenêtre
root.resizable(height = False, width = False)
root.event_delete
root.size()
#*******************************************************************************
#*******************************************************************************
# Boutons, étiquettes et champs de saisie
#*******************************************************************************
#*******************************************************************************
# Bouton d'arrêt de la musique
btn_couperMusique = Button(root, text="Chants", fg ='blue', command = choix_musique, relief=RAISED)
btn_couperMusique.place(x = 20, y = 125)
btn_couperMusique['font'] = fontbarre
#*******************************************************************************
#*******************************************************************************
# Bouton de switch de la conversion Francs->Euros ou Euros->Francs ainsi que son étiquette
mode = Label(root,text="Choix du mode ->")
mode.place(x = 230, y = 30)
btn_ch_mode = Button(root, text="Euros -> Francs", fg ='blue', command = switch_feef , relief = RAISED)
btn_ch_mode.place ( x = 330, y = 25)
#*******************************************************************************
#*******************************************************************************
# Saisie du champ Francs
lblFrancs = Label(root,text="Somme en Francs : ")
lblFrancs.place(x = 110, y = 20)
Francs = Entry(root, width = 15)
Francs.place( x = 120, y = 40)
# Le curseur clignote dans le champ Francs
Francs.focus_set()
#*******************************************************************************
#*******************************************************************************
# Saisie du champ Euros
lblEuros = Label(root,text="Somme en Euros : ")
Euros = Entry(root, width = 15 )
lblEuros.place(x = 110, y = 60)
Euros.place(x = 120, y = 80)
#*******************************************************************************
#*******************************************************************************
# Le bouton Effacer est créé
btn_effacer = Button(root, text="Effacer", fg ='blue', command = effacer, relief = RAISED)
btn_effacer.place(x = 230, y = 60)
# Par défaut le bouton Effacer est grisé car il n'y a rien à effacer
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Le bouton Quitter est créé
bouton2 = Button(root, text="Quitter", fg ='blue', command = root.destroy, relief = RAISED)
bouton2.place(x = 375, y = 130)
#*******************************************************************************
#*******************************************************************************
# Etiquette du mode d'emploi
modeEmploi = Label(root,text="Enter pour calculer,\nQ ou Echap pour quitter\n H--> A propos de...")
modeEmploi.place( x = 100, y = 100)
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
# Détection d'une touche quelconque du clavier, de la touche Enter Echap ou 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()
# Quand on quitte le programme, on arrête la musique et on dit au revoir
couper_musique()
jouer_musique('aurevoir.wav')
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
au niveau des lignes 40 à 45 dans la fonction <touche_tabulation> je voudrais effectuer une réaffectation du focus mais le <if> de la ligne 44 n'est jamais vrai.
D'autre part, j'ai essayé de changer l'affectation du focus dans la même fonction et ça ne fonctionne pas.
Pouvez-vous m'aider à résoudre cette énigme ?
Merci par avance
A voir également:
- Azertyuiopqsdfghjklmwxcvbn pourquoi cet ordre
- Pourquoi les touches du clavier sont-elles dans cet ordre-là ? - Forum Clavier
- Problème de définition d'ordre de boot - Forum Windows
- Excel trier par ordre croissant chiffre - Guide
- Azertyuiopqsdfghjklmwxcvbn jeu ✓ - Forum Jeux vidéo
- GTA IV - Forum Jeux vidéo
7 réponses
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
17 sept. 2020 à 18:16
17 sept. 2020 à 18:16
bonjour, peux-tu préciser "python" dans les balises de code quand tu partages du python, comme expliqué: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
par ailleurs, nous pourrons plus facilement t'aider si tu simplifies ton programme, pour ne garder que la partie relative aux tabulations tkinter.
par ailleurs, nous pourrons plus facilement t'aider si tu simplifies ton programme, pour ne garder que la partie relative aux tabulations tkinter.
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
17 sept. 2020 à 18:53
17 sept. 2020 à 18:53
Merci beaucoup de ton effort yg_be.
Voici le code python 3.8.5 épuré :
c'est toujours la fonction <touche_tabulation> qui m'intéresse et qui me fais soucis.
Merci encore à tous ceux qui me répondront.
Voici le code python 3.8.5 épuré :
#-------------------------------------------------------------------------------
# Name: FrancsEuros.py
# Purpose: Une conversion Francs Euros ou Euros Francs facile
#
# Author: BALDONI GUY
#
# Created: 07/09/2020
# Copyright: (c) BALDONI GUY 2020
# Licence: <your licence>
#-------------------------------------------------------------------------------
# coding: utf8
from tkinter import *
import tkinter.messagebox
import os
import winsound
import datetime
from math import *
from winsound import *
# Définition fréquence et durée des beep de winsound
frequency = 2500 # Set Frequency To 2500 Hertz
duration = 500 # Set Duration To 500 ms == 1/2 second
# Définition d'une fonte barrée et non barrée
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('Vous avez appuyé sur la touche tabulation')
print(root.focus_get())
print(Francs.focus_get())
if Francs.focus_get() == '.!button2' :
print('Focus sur Bouton2')
#*******************************************************************************
# Fonction de destruction de la fenêtre principale suite à un événement clavier
def exit(event):
root.destroy()
#*******************************************************************************
#*******************************************************************************
# Fonction de choix d'un mode Francs->Euros ou Euros->Francs
def switch_feef():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
if btn_ch_mode["text"] == "Francs -> Euros" :
btn_ch_mode["text"] = "Euros -> Francs"
root.title("Conversion actuelle Francs->Euros")
Francs.focus_set()
else:
btn_ch_mode["text"] = "Francs -> Euros"
root.title("Conversion actuelle Euros->Francs")
Euros.focus_set()
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Efface les deux champs de saisie et grise le bouton Effacer
def effacer():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
# Le bouton Effacer est grisé
btn_effacer["state"] = "disabled"
# Le curseur clignote dans le champ Francs
Francs.focus_set()
root.title("Conversion actuelle Francs->Euros")
# Fenêtre principale
root = Tk()
root.geometry("430x160")
# Test de mise en couleur
#root.configure(bg='cyan')
# Place l'application au centre de l'écran
x = (root.winfo_screenwidth() - root.winfo_reqwidth()) / 2
y = (root.winfo_screenheight() - root.winfo_reqheight()) / 2
root.geometry("+%d+%d" % (x, y))
# Définition du titre de l'application au départ
root.title("Conversion actuelle Francs->Euros")
# Interdire l'agrandissement de la fenêtre
root.resizable(height = False, width = False)
root.event_delete
root.size()
#*******************************************************************************
#*******************************************************************************
# Boutons, étiquettes et champs de saisie
#*******************************************************************************
#*******************************************************************************
# Bouton de switch de la conversion Francs->Euros ou Euros->Francs ainsi que son étiquette
mode = Label(root,text="Choix du mode ->")
mode.place(x = 230, y = 30)
btn_ch_mode = Button(root, text="Euros -> Francs", fg ='blue', command = switch_feef , relief = RAISED)
btn_ch_mode.place ( x = 330, y = 25)
#*******************************************************************************
#*******************************************************************************
# Saisie du champ Francs
lblFrancs = Label(root,text="Somme en Francs : ")
lblFrancs.place(x = 110, y = 20)
Francs = Entry(root, width = 15)
Francs.place( x = 120, y = 40)
# Le curseur clignote dans le champ Francs
Francs.focus_set()
#*******************************************************************************
#*******************************************************************************
# Saisie du champ Euros
lblEuros = Label(root,text="Somme en Euros : ")
Euros = Entry(root, width = 15 )
lblEuros.place(x = 110, y = 60)
Euros.place(x = 120, y = 80)
#*******************************************************************************
#*******************************************************************************
# Le bouton Effacer est créé
btn_effacer = Button(root, text="Effacer", fg ='blue', command = effacer, relief = RAISED)
btn_effacer.place(x = 230, y = 60)
# Par défaut le bouton Effacer est grisé car il n'y a rien à effacer
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Le bouton Quitter est créé
bouton2 = Button(root, text="Quitter", fg ='blue', command = root.destroy, relief = RAISED)
bouton2.place(x = 375, y = 130)
#*******************************************************************************
#*******************************************************************************
# Etiquette du mode d'emploi
modeEmploi = Label(root,text="Enter pour calculer,\nQ ou Echap pour quitter\n H--> A propos de...")
modeEmploi.place( x = 100, y = 100)
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
# Détection d'une touche quelconque du clavier, de la touche Enter Echap ou 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()
# Quand on quitte le programme, on arrête la musique et on dit au revoir
#*******************************************************************************
#*******************************************************************************
#*******************************************************************************
c'est toujours la fonction <touche_tabulation> qui m'intéresse et qui me fais soucis.
Merci encore à tous ceux qui me répondront.
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
Ambassadeur
1 557
17 sept. 2020 à 20:26
17 sept. 2020 à 20:26
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:
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' :
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
17 sept. 2020 à 20:34
17 sept. 2020 à 20:34
par ailleurs, la fonction lift() permet de contrôler la séquence de tabulation.
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
17 sept. 2020 à 20:48
17 sept. 2020 à 20:48
Merci yg_be pour ta patience, j'apprends.
Mon code :
# Name: FrancsEuros.py
# Purpose: Une conversion Francs Euros ou Euros Francs facile
#
# Author: BALDONI GUY
#
# Created: 07/09/2020
# Copyright: (c) BALDONI GUY 2020
# Licence: <your licence>
#-------------------------------------------------------------------------------
# coding: utf8
from tkinter import *
import os
from math import *
def touche_clav(event):
btn_effacer["state"] = "normal"
def touche_tabulation(event):
print('Vous avez appuyé sur la touche tabulation')
print(root.focus_get())
if str(Francs.focus_get()) == '.!button2' :
print('Focus sur Bouton2')
#*******************************************************************************
# Fonction de destruction de la fenêtre principale suite à un événement clavier
def exit(event):
root.destroy()
#*******************************************************************************
#*******************************************************************************
# Fonction de choix d'un mode Francs->Euros ou Euros->Francs
def switch_feef():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
if btn_ch_mode["text"] == "Francs -> Euros" :
btn_ch_mode["text"] = "Euros -> Francs"
root.title("Conversion actuelle Francs->Euros")
Francs.focus_set()
else:
btn_ch_mode["text"] = "Francs -> Euros"
root.title("Conversion actuelle Euros->Francs")
Euros.focus_set()
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Efface les deux champs de saisie et grise le bouton Effacer
def effacer():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
# Le bouton Effacer est grisé
btn_effacer["state"] = "disabled"
# Le curseur clignote dans le champ Francs
Francs.focus_set()
root.title("Conversion actuelle Francs->Euros")
# Fenêtre principale
root = Tk()
root.geometry("430x160")
# Définition du titre de l'application au départ
root.title("Conversion actuelle Francs->Euros")
# Interdire l'agrandissement de la fenêtre
root.resizable(height = False, width = False)
root.event_delete
root.size()
#*******************************************************************************
#*******************************************************************************
# Boutons, étiquettes et champs de saisie
#*******************************************************************************
#*******************************************************************************
# Bouton de switch de la conversion Francs->Euros ou Euros->Francs ainsi que son étiquette
mode = Label(root,text="Choix du mode ->")
mode.place(x = 230, y = 30)
btn_ch_mode = Button(root, text="Euros -> Francs", fg ='blue', command = switch_feef , relief = RAISED)
btn_ch_mode.place ( x = 330, y = 25)
#*******************************************************************************
#*******************************************************************************
# Saisie du champ Francs
lblFrancs = Label(root,text="Somme en Francs : ")
lblFrancs.place(x = 110, y = 20)
Francs = Entry(root, width = 15)
Francs.place( x = 120, y = 40)
# Le curseur clignote dans le champ Francs
Francs.focus_set()
#*******************************************************************************
#*******************************************************************************
# Saisie du champ Euros
lblEuros = Label(root,text="Somme en Euros : ")
Euros = Entry(root, width = 15 )
lblEuros.place(x = 110, y = 60)
Euros.place(x = 120, y = 80)
#*******************************************************************************
#*******************************************************************************
# Le bouton Effacer est créé grisé car il n'y a rien à effacer
btn_effacer = Button(root, text="Effacer", fg ='blue', state = 'disabled',command = effacer, relief = RAISED)
btn_effacer.place(x = 230, y = 60)
#*******************************************************************************
#*******************************************************************************
# Le bouton Quitter est créé
bouton2 = Button(root, text="Quitter", fg ='blue', command = root.destroy, relief = RAISED)
bouton2.place(x = 375, y = 130)
#*******************************************************************************
#*******************************************************************************
# Détection d'une touche quelconque du clavier, de la touche Enter Echap ou 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 fait lorsque l'on appuie sur tabulation à plusieurs reprises le focus passe par
les champs de saisie puis sur les boutons.
Je voudrais que l'on passe d'un champ à l'autre sans passer par les boutons.
Merci de ta compréhension.
Baldo35
Mon code :
<code python>#-------------------------------------------------------------------------------
# Name: FrancsEuros.py
# Purpose: Une conversion Francs Euros ou Euros Francs facile
#
# Author: BALDONI GUY
#
# Created: 07/09/2020
# Copyright: (c) BALDONI GUY 2020
# Licence: <your licence>
#-------------------------------------------------------------------------------
# coding: utf8
from tkinter import *
import os
from math import *
def touche_clav(event):
btn_effacer["state"] = "normal"
def touche_tabulation(event):
print('Vous avez appuyé sur la touche tabulation')
print(root.focus_get())
if str(Francs.focus_get()) == '.!button2' :
print('Focus sur Bouton2')
#*******************************************************************************
# Fonction de destruction de la fenêtre principale suite à un événement clavier
def exit(event):
root.destroy()
#*******************************************************************************
#*******************************************************************************
# Fonction de choix d'un mode Francs->Euros ou Euros->Francs
def switch_feef():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
if btn_ch_mode["text"] == "Francs -> Euros" :
btn_ch_mode["text"] = "Euros -> Francs"
root.title("Conversion actuelle Francs->Euros")
Francs.focus_set()
else:
btn_ch_mode["text"] = "Francs -> Euros"
root.title("Conversion actuelle Euros->Francs")
Euros.focus_set()
btn_effacer["state"] = "disabled"
#*******************************************************************************
#*******************************************************************************
# Efface les deux champs de saisie et grise le bouton Effacer
def effacer():
# On efface les deux champs de saisie
Euros.delete(0 , END)
Francs.delete(0 , END)
# Le bouton Effacer est grisé
btn_effacer["state"] = "disabled"
# Le curseur clignote dans le champ Francs
Francs.focus_set()
root.title("Conversion actuelle Francs->Euros")
# Fenêtre principale
root = Tk()
root.geometry("430x160")
# Définition du titre de l'application au départ
root.title("Conversion actuelle Francs->Euros")
# Interdire l'agrandissement de la fenêtre
root.resizable(height = False, width = False)
root.event_delete
root.size()
#*******************************************************************************
#*******************************************************************************
# Boutons, étiquettes et champs de saisie
#*******************************************************************************
#*******************************************************************************
# Bouton de switch de la conversion Francs->Euros ou Euros->Francs ainsi que son étiquette
mode = Label(root,text="Choix du mode ->")
mode.place(x = 230, y = 30)
btn_ch_mode = Button(root, text="Euros -> Francs", fg ='blue', command = switch_feef , relief = RAISED)
btn_ch_mode.place ( x = 330, y = 25)
#*******************************************************************************
#*******************************************************************************
# Saisie du champ Francs
lblFrancs = Label(root,text="Somme en Francs : ")
lblFrancs.place(x = 110, y = 20)
Francs = Entry(root, width = 15)
Francs.place( x = 120, y = 40)
# Le curseur clignote dans le champ Francs
Francs.focus_set()
#*******************************************************************************
#*******************************************************************************
# Saisie du champ Euros
lblEuros = Label(root,text="Somme en Euros : ")
Euros = Entry(root, width = 15 )
lblEuros.place(x = 110, y = 60)
Euros.place(x = 120, y = 80)
#*******************************************************************************
#*******************************************************************************
# Le bouton Effacer est créé grisé car il n'y a rien à effacer
btn_effacer = Button(root, text="Effacer", fg ='blue', state = 'disabled',command = effacer, relief = RAISED)
btn_effacer.place(x = 230, y = 60)
#*******************************************************************************
#*******************************************************************************
# Le bouton Quitter est créé
bouton2 = Button(root, text="Quitter", fg ='blue', command = root.destroy, relief = RAISED)
bouton2.place(x = 375, y = 130)
#*******************************************************************************
#*******************************************************************************
# Détection d'une touche quelconque du clavier, de la touche Enter Echap ou 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 fait lorsque l'on appuie sur tabulation à plusieurs reprises le focus passe par
les champs de saisie puis sur les boutons.
Je voudrais que l'on passe d'un champ à l'autre sans passer par les boutons.
Merci de ta compréhension.
Baldo35
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
18 sept. 2020 à 11:08
18 sept. 2020 à 11:08
Bonjour Baldo,
Toujours pas !
Ca doit ressembler à ceci:
Toujours pas !
Ca doit ressembler à ceci:
# coding: utf8 from tkinter import * import os from math import * def touche_clav(event): btn_effacer["state"] = "normal" def touche_tabulation(event): print('Vous avez appuyé sur la touche tabulation') print(root.focus_get()) if str(Francs.focus_get()) == '.!button2' : print('Focus sur Bouton2')
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
18 sept. 2020 à 12:34
18 sept. 2020 à 12:34
Bonjour Phil,
le code que tu me donnes fonctionne bien mais je voudrais :
En fait lorsque l'on appuie sur tabulation à plusieurs reprises le focus passe par
les champs de saisie puis sur les boutons.
Je voudrais que l'on passe d'un champ à l'autre sans passer par les boutons.
Merci de ta compréhension.
Baldo35
le code que tu me donnes fonctionne bien mais je voudrais :
En fait lorsque l'on appuie sur tabulation à plusieurs reprises le focus passe par
les champs de saisie puis sur les boutons.
Je voudrais que l'on passe d'un champ à l'autre sans passer par les boutons.
Merci de ta compréhension.
Baldo35
Phil_1857
Messages postés
1872
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
168
18 sept. 2020 à 13:03
18 sept. 2020 à 13:03
Je ne t'ai pas donné de code qui fonctionne bien
Je t'ai mis les 14 premières lignes de ton code avec les balises de code placées correctement
pour que tu voie à quoi ca doit ressembler exactement
Il faut donc que tu remettes ton code complet avec les balises, ca doit apparaitre exactement
comme sur mon exemple, avec les couleurs, les indentations et tout ...
Je t'ai mis les 14 premières lignes de ton code avec les balises de code placées correctement
pour que tu voie à quoi ca doit ressembler exactement
Il faut donc que tu remettes ton code complet avec les balises, ca doit apparaitre exactement
comme sur mon exemple, avec les couleurs, les indentations et tout ...
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
18 sept. 2020 à 14:00
18 sept. 2020 à 14:00
Mille excuses Phil,
j'essai :
J'espère que cette fois-ci ça va être bon.
Donc, je voudrais que la touche <Tabulation> fasse passer d'un champ de saisie à l'autre en évitant d'aller sur
les boutons.
Encore merci pour ta patience.
Baldo35
j'essai :
#------------------------------------------------------------------------------- # Name: FrancsEuros.py # Purpose: Une conversion Francs Euros ou Euros Francs facile # # Author: BALDONI GUY # # Created: 07/09/2020 # Copyright: (c) BALDONI GUY 2020 # Licence: <your licence> #------------------------------------------------------------------------------- # coding: utf8 from tkinter import * import os from math import * def touche_clav(event): btn_effacer["state"] = "normal" def touche_tabulation(event): print('Vous avez appuyé sur la touche tabulation') print(root.focus_get()) if str(Francs.focus_get()) == '.!entry2' : print('Focus sur Bouton3') Francs.focus_set() #******************************************************************************* # Fonction de destruction de la fenêtre principale suite à un événement clavier def exit(event): root.destroy() #******************************************************************************* #******************************************************************************* # Fonction de choix d'un mode Francs->Euros ou Euros->Francs def switch_feef(): # On efface les deux champs de saisie Euros.delete(0 , END) Francs.delete(0 , END) if btn_ch_mode["text"] == "Francs -> Euros" : btn_ch_mode["text"] = "Euros -> Francs" root.title("Conversion actuelle Francs->Euros") Francs.focus_set() else: btn_ch_mode["text"] = "Francs -> Euros" root.title("Conversion actuelle Euros->Francs") Euros.focus_set() btn_effacer["state"] = "disabled" #******************************************************************************* #******************************************************************************* # Efface les deux champs de saisie et grise le bouton Effacer def effacer(): # On efface les deux champs de saisie Euros.delete(0 , END) Francs.delete(0 , END) # Le bouton Effacer est grisé btn_effacer["state"] = "disabled" # Le curseur clignote dans le champ Francs Francs.focus_set() root.title("Conversion actuelle Francs->Euros") # Fenêtre principale root = Tk() root.geometry("430x160") # Définition du titre de l'application au départ root.title("Conversion actuelle Francs->Euros") # Interdire l'agrandissement de la fenêtre root.resizable(height = False, width = False) root.event_delete root.size() #******************************************************************************* #******************************************************************************* # Boutons, étiquettes et champs de saisie #******************************************************************************* #******************************************************************************* # Bouton de switch de la conversion Francs->Euros ou Euros->Francs ainsi que son étiquette mode = Label(root,text="Choix du mode ->") mode.place(x = 230, y = 30) btn_ch_mode = Button(root, text="Euros -> Francs", fg ='blue', command = switch_feef , relief = RAISED) btn_ch_mode.place ( x = 330, y = 25) #******************************************************************************* #******************************************************************************* # Saisie du champ Francs lblFrancs = Label(root,text="Somme en Francs : ") lblFrancs.place(x = 110, y = 20) Francs = Entry(root, width = 15) Francs.place( x = 120, y = 40) # Le curseur clignote dans le champ Francs Francs.focus_set() #******************************************************************************* #******************************************************************************* # Saisie du champ Euros lblEuros = Label(root,text="Somme en Euros : ") Euros = Entry(root, width = 15 ) lblEuros.place(x = 110, y = 60) Euros.place(x = 120, y = 80) #******************************************************************************* #******************************************************************************* # Le bouton Effacer est créé grisé car il n'y a rien à effacer btn_effacer = Button(root, text="Effacer", fg ='blue', state = 'disabled',command = effacer, relief = RAISED) btn_effacer.place(x = 230, y = 60) #******************************************************************************* #******************************************************************************* # Le bouton Quitter est créé bouton2 = Button(root, text="Quitter", fg ='blue', command = root.destroy, relief = RAISED) bouton2.place(x = 375, y = 130) #******************************************************************************* #******************************************************************************* # Détection d'une touche quelconque du clavier, de la touche Enter Echap ou 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() #******************************************************************************* #******************************************************************************* #*******************************************************************************
J'espère que cette fois-ci ça va être bon.
Donc, je voudrais que la touche <Tabulation> fasse passer d'un champ de saisie à l'autre en évitant d'aller sur
les boutons.
Encore merci pour ta patience.
Baldo35
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
>
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
18 sept. 2020 à 16:28
18 sept. 2020 à 16:28
as-tu toujours le même problème avec le if?
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
>
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
18 sept. 2020 à 16:42
18 sept. 2020 à 16:42
tu as d'abord expliqué que tu voulais changer l'ordre des tabulations.
ensuite tu expliques que tu veux éviter d'aller sur les boutons.
de quoi s'agit-il précisément? merci de prendre le temps de t'expliquer clairement.
si tu veux exclure le widget bouton2 de la séquence de tabulation:
ensuite tu expliques que tu veux éviter d'aller sur les boutons.
de quoi s'agit-il précisément? merci de prendre le temps de t'expliquer clairement.
si tu veux exclure le widget bouton2 de la séquence de tabulation:
bouton2.config(takefocus=False)
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
>
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
18 sept. 2020 à 16:59
18 sept. 2020 à 16:59
Merci beaucoup à toi yg_be, c'est la solution que j'attendais.
Je me suis certainement mal exprimé mais tu m'as compris.
A plus sur la toile
Je me suis certainement mal exprimé mais tu m'as compris.
A plus sur la toile
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
18 sept. 2020 à 16:36
18 sept. 2020 à 16:36
Bonjour,
le problème avec le if est résolu.
Mais je n'arrive toujours pas à forcer le focus sur mon champ de saisie quand tabulation est actionné (le focus passe inévitablement sur les boutons).
Merci
le problème avec le if est résolu.
Mais je n'arrive toujours pas à forcer le focus sur mon champ de saisie quand tabulation est actionné (le focus passe inévitablement sur les boutons).
Merci
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
18 sept. 2020 à 16:39
18 sept. 2020 à 16:39
En ligne 25 le :
ne fonctionne pas.
Francs.focus_set()
ne fonctionne pas.
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
1 557
18 sept. 2020 à 17:03
18 sept. 2020 à 17:03
nous pourrons mieux t'aider si tu nous tiens rapidement et spontanément au courant de l'effet de nos suggestions.
Baldo35
Messages postés
13
Date d'inscription
lundi 31 août 2020
Statut
Membre
Dernière intervention
18 septembre 2020
>
yg_be
Messages postés
23405
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
20 décembre 2024
18 sept. 2020 à 17:14
18 sept. 2020 à 17:14
oui, effectivement ta solution appliquée à tous les widgets button entraine que le focus reste placé sur les champs de saisie (c'était le but de ma demande).