Réorientation de l'ordre des tabulations tkinter
Résolu
Baldo35
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
Baldo35 Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Baldo35 Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Azertyuiopqsdfghjklmwxcvbn pourquoi cet ordre
- Excel trier par ordre croissant chiffre - Guide
- Longueur, largeur, hauteur dans quel ordre ✓ - Forum Loisirs / Divertissements
- Ordre meilleur ami snap - Forum Snapchat
- Azertyuiopqsdfghjklmwxcvbn jeu - Forum Jeux vidéo
- Meilleurs amis snaps - Forum Snapchat
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
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
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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' :
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
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')
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
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 ...
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
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)
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