[python] à quoi sert le focus ???
Résolu/Fermé
Todesfall
fazzer - 17 mai 2018 à 00:17
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
fazzer - 17 mai 2018 à 00:17
A voir également:
- Focus tkinter
- Tkinter focus - Meilleures réponses
- Focus python - Meilleures réponses
- [python] à quoi sert le focus ??? ✓ - Forum - Python
- Helicon focus - Télécharger
- Réinitialiser autoradio ford focus ✓ - Forum - Autoradio
- Puissance 4 tkinter ✓ - Forum - Python
- Débloquer autoradio Ford focus année 2000 - Forum - Autoradio
54 réponses
sebsauvage
24 mai 2007 à 14:33
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
24 mai 2007 à 14:33
ça sert à choisir quel widget a le focus.
lapin comprî ? :-D
J'explique: par exemple dans une interface graphique, il peut y avoir plusieurs zones de texte.
Quand tu tape, le texte s'inscrit dans la zone qui est actuellement active, celle qui a le focus.
set_focus() permet de désigner une zone de texte, un bouton ou n'importe quoi d'autre qui recevra les évènements clavier.
lapin comprî ? :-D
J'explique: par exemple dans une interface graphique, il peut y avoir plusieurs zones de texte.
Quand tu tape, le texte s'inscrit dans la zone qui est actuellement active, celle qui a le focus.
set_focus() permet de désigner une zone de texte, un bouton ou n'importe quoi d'autre qui recevra les évènements clavier.
sebsauvage
24 mai 2007 à 17:13
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
24 mai 2007 à 17:13
Attention:
Là tu ne récupère pas l'entry que tu viens de créer.
Il faut faire:
Ce qui donne, avec le focus:
entr1 = Entry(fen1).grid(row = 0, column = 1)
Là tu ne récupère pas l'entry que tu viens de créer.
Il faut faire:
entr1 = Entry(fen1) entr1.grid(row = 0, column = 1)
Ce qui donne, avec le focus:
# -*- coding: cp1252 -*- from Tkinter import * fen1 = Tk() fen1.title('Bonjour') txt1 = Label(fen1, text = "Bonjour !!!!") txt1.grid(row = 0, sticky = W) entr1 = Entry(fen1) entr1.grid(row = 0, column = 1) ok = Button(fen1, text = 'O K', width = 15, command = fen1.destroy) ok.grid(row=1, column = 1) entr1.focus_set() fen1.mainloop()
Todesfall
24 mai 2007 à 15:14
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
24 mai 2007 à 15:14
Merci mais pourrais-tu me donner un exemple concret, par exemple un petit code, pour mieux comprendre.
Merci
Merci
sebsauvage
24 mai 2007 à 16:04
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
24 mai 2007 à 16:04
Certainement.
Il y a un exemple dans cette page:
https://sebsauvage.net/python/gui/index_fr.html
Il y a un exemple dans cette page:
https://sebsauvage.net/python/gui/index_fr.html
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Todesfall
24 mai 2007 à 16:29
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
24 mai 2007 à 16:29
Merci
Todesfall
24 mai 2007 à 17:04
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
24 mai 2007 à 17:04
Dans l'exemple suivant où mettrais-tu le focus_set et qu'est-ce qu'il serait :
# -*- coding: cp1252 -*-
from Tkinter import *
fen1 = Tk()
fen1.title('Bonjour')
txt1 = Label(fen1, text = "Bonjour !!!!").grid(row = 0, sticky = W)
entr1 = Entry(fen1).grid(row = 0, column = 1)
ok = Button(fen1, text = 'O K', width = 15, command = fen1.destroy).grid(row=1, column = 1)
fen1.mainloop()
# -*- coding: cp1252 -*-
from Tkinter import *
fen1 = Tk()
fen1.title('Bonjour')
txt1 = Label(fen1, text = "Bonjour !!!!").grid(row = 0, sticky = W)
entr1 = Entry(fen1).grid(row = 0, column = 1)
ok = Button(fen1, text = 'O K', width = 15, command = fen1.destroy).grid(row=1, column = 1)
fen1.mainloop()
Todesfall
24 mai 2007 à 17:05
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
24 mai 2007 à 17:05
--
@--ToDeSfAlL--@
@--ToDeSfAlL--@
Todesfall
25 mai 2007 à 08:41
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
25 mai 2007 à 08:41
Merci ça fonctionne pour cet exemple, mais pour celui-là ma deuxième fenetre n'est pas selectionné :
# -*- coding: cp1252 -*-
from Tkinter import *
fen1 = Tk()
fen1.title('Bonjour')
txt1 = Label(fen1, text = "Bonjour !!!!").grid(row = 0, sticky = W)
entr1 = Entry(fen1)
entr1.grid(row = 0, column = 1)
ok = Button(fen1, text = 'O K', width = 15, command = fen1.destroy)
ok.grid(row=1, column = 1)
entr1.focus_set()
fen1.mainloop()
fen2 = Tk()
fen2.title('Bonne après-midi')
txt2 = Label(fen2, text = "Bonne après-midi !!!!")
txt2.grid(row = 0, sticky = W)
ok = Button(fen2, text = 'O K', width = 15, command = fen2.destroy)
ok.grid(row=1, column = 0)
ok.focus_set()
fen2.mainloop()
fen3 = Tk()
fen3.title('Au revoir')
txt3 = Label(fen3, text = "Il est temps de nous dire au revoir !!!!")
txt3.grid(row = 0, sticky = W)
ok = Button(fen3, text = 'O K', width = 15, command = fen3.destroy)
ok.grid(row=1, column = 0)
ok.focus_set()
fen3.mainloop()
Pourquoi ?
# -*- coding: cp1252 -*-
from Tkinter import *
fen1 = Tk()
fen1.title('Bonjour')
txt1 = Label(fen1, text = "Bonjour !!!!").grid(row = 0, sticky = W)
entr1 = Entry(fen1)
entr1.grid(row = 0, column = 1)
ok = Button(fen1, text = 'O K', width = 15, command = fen1.destroy)
ok.grid(row=1, column = 1)
entr1.focus_set()
fen1.mainloop()
fen2 = Tk()
fen2.title('Bonne après-midi')
txt2 = Label(fen2, text = "Bonne après-midi !!!!")
txt2.grid(row = 0, sticky = W)
ok = Button(fen2, text = 'O K', width = 15, command = fen2.destroy)
ok.grid(row=1, column = 0)
ok.focus_set()
fen2.mainloop()
fen3 = Tk()
fen3.title('Au revoir')
txt3 = Label(fen3, text = "Il est temps de nous dire au revoir !!!!")
txt3.grid(row = 0, sticky = W)
ok = Button(fen3, text = 'O K', width = 15, command = fen3.destroy)
ok.grid(row=1, column = 0)
ok.focus_set()
fen3.mainloop()
Pourquoi ?
sebsauvage
25 mai 2007 à 09:01
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
25 mai 2007 à 09:01
C'est normal.
As-tu lu la page de tutoriel que j'ai donnée ?
Le .mainloop() boucle à l'infini.
Il ne doit y avoir qu'un seul mainloop() d'appelé, et toutes les fenêtres et actions seront déclenchées par divers évènements (clic sur un bouton, etc.)
Je vais le répéter:
Il ne doit y avoir qu'un seul appel à .mainloop() dans ton programme.
As-tu lu la page de tutoriel que j'ai donnée ?
Le .mainloop() boucle à l'infini.
Il ne doit y avoir qu'un seul mainloop() d'appelé, et toutes les fenêtres et actions seront déclenchées par divers évènements (clic sur un bouton, etc.)
Je vais le répéter:
Il ne doit y avoir qu'un seul appel à .mainloop() dans ton programme.
Todesfall
25 mai 2007 à 09:08
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
25 mai 2007 à 09:08
Alors comment faire dans mon exemple précédent pour qu'il n'y ai qu'un seul mainloop() ?
sebsauvage
25 mai 2007 à 09:13
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
25 mai 2007 à 09:13
D'abord, il faut créer une classe par fenêtre, comme dans la page d'exemple que j'ai donnée.
Todesfall
25 mai 2007 à 09:20
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
25 mai 2007 à 09:20
Je ne vois pas du tout comment faire car je pose plusieurs questions à l'utilisateur dans plusieur fenetre alors je ne sais pas comment faire pour qu'il n'y ai qu'un seul mainloop().
Todesfall
25 mai 2007 à 10:11
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
25 mai 2007 à 10:11
Par exemple :
# -*- coding: iso-8859-1 -*-
from Tkinter import *
class MenuBar(Frame):
"""Barre de menus déroulants"""
def __init__(self, boss = None):
Frame.__init__(self,borderwidth = 2)
### Menu <Fichier> ###
fileMenu = Menubutton(self, text = 'Fichier')
fileMenu.pack(side = LEFT)
# Partie déroulante :
me1 = Menu(fileMenu)
me1.add_command(label = 'Nouveau dossier machine', underline = 0)
me1.add_command(label = 'Nouveau dossier machine avec aide', underline = 1)
me1.add_separator()
me1.add_command(label = 'Imprimer', underline = 0)
me1.add_separator()
me1.add_command(label = 'Quitter', underline = 0, command = boss.quit)
# Intégration du menu :
fileMenu.configure(menu = me1)
### Menu <Edition> ###
fileMenu = Menubutton(self, text = 'Edition')
fileMenu.pack(side = LEFT)
# Partie déroulante
me2 = Menu(fileMenu)
me2.add_command(label = 'Copier', underline = 4)
me2.add_command(label = 'Coller', underline = 1)
# Intégration du menu :
fileMenu.configure(menu = me2)
### Menu <Aide> ###
fileMenu = Menubutton(self, text = 'Aide')
fileMenu.pack(side = LEFT)
# Partie déroulante
me3 = Menu(fileMenu)
me3.add_command(label = 'Aide', underline = 0)
me3.add_separator()
me3.add_command(label = 'A propos de...', underline = 7, command = boss.propos)
# Intégration du menu :
fileMenu.configure(menu = me3)
class Application(Frame):
"""Application principale"""
def __init__(self, boss = None):
Frame.__init__(self)
self.master.title('Dossier Machine')
mBar = MenuBar(self)
mBar.pack()
self.can = Canvas(self,bg='light grey', height = 190, width=250, borderwidth = 2)
self.can.pack()
self.pack()
def propos(self):
fen1 = Tk()
fen1.title('A propos de ...')
text1 = Label(fen1, text = "Dossier Machine 2007").grid(row = 0, sticky = W)
text2 = Label(fen1, text = "Part of *** Edition 2007").grid(row = 1, sticky = W)
text3 = Label(fen1, text = "Copyright (c) ***. Tous droits réservés.").grid(row = 2, sticky = W)
text4 = Label(fen1, text = "Version 1.01").grid(row = 3, sticky = W)
text5 = Label(fen1, text = "Licence d'utilisation accordée à :").grid(row = 4, sticky = W)
text6 = Label(fen1, text = " - ***").grid(row = 5, sticky = W)
ok = Button(fen1, text = "OK", width = 15, command = fen1.destroy)
ok.grid(row = 6, column = 0)
ok.focus_set()
fen1.mainloop()
if __name__ == '__main__':
app = Application()
app.mainloop()
comment faire pour que lorsque je fais Aide/à propos de ..., je n'utilise pas le mainloop() de la fenetre pour qu'il n'y en ai qu'un dans le programme.
# -*- coding: iso-8859-1 -*-
from Tkinter import *
class MenuBar(Frame):
"""Barre de menus déroulants"""
def __init__(self, boss = None):
Frame.__init__(self,borderwidth = 2)
### Menu <Fichier> ###
fileMenu = Menubutton(self, text = 'Fichier')
fileMenu.pack(side = LEFT)
# Partie déroulante :
me1 = Menu(fileMenu)
me1.add_command(label = 'Nouveau dossier machine', underline = 0)
me1.add_command(label = 'Nouveau dossier machine avec aide', underline = 1)
me1.add_separator()
me1.add_command(label = 'Imprimer', underline = 0)
me1.add_separator()
me1.add_command(label = 'Quitter', underline = 0, command = boss.quit)
# Intégration du menu :
fileMenu.configure(menu = me1)
### Menu <Edition> ###
fileMenu = Menubutton(self, text = 'Edition')
fileMenu.pack(side = LEFT)
# Partie déroulante
me2 = Menu(fileMenu)
me2.add_command(label = 'Copier', underline = 4)
me2.add_command(label = 'Coller', underline = 1)
# Intégration du menu :
fileMenu.configure(menu = me2)
### Menu <Aide> ###
fileMenu = Menubutton(self, text = 'Aide')
fileMenu.pack(side = LEFT)
# Partie déroulante
me3 = Menu(fileMenu)
me3.add_command(label = 'Aide', underline = 0)
me3.add_separator()
me3.add_command(label = 'A propos de...', underline = 7, command = boss.propos)
# Intégration du menu :
fileMenu.configure(menu = me3)
class Application(Frame):
"""Application principale"""
def __init__(self, boss = None):
Frame.__init__(self)
self.master.title('Dossier Machine')
mBar = MenuBar(self)
mBar.pack()
self.can = Canvas(self,bg='light grey', height = 190, width=250, borderwidth = 2)
self.can.pack()
self.pack()
def propos(self):
fen1 = Tk()
fen1.title('A propos de ...')
text1 = Label(fen1, text = "Dossier Machine 2007").grid(row = 0, sticky = W)
text2 = Label(fen1, text = "Part of *** Edition 2007").grid(row = 1, sticky = W)
text3 = Label(fen1, text = "Copyright (c) ***. Tous droits réservés.").grid(row = 2, sticky = W)
text4 = Label(fen1, text = "Version 1.01").grid(row = 3, sticky = W)
text5 = Label(fen1, text = "Licence d'utilisation accordée à :").grid(row = 4, sticky = W)
text6 = Label(fen1, text = " - ***").grid(row = 5, sticky = W)
ok = Button(fen1, text = "OK", width = 15, command = fen1.destroy)
ok.grid(row = 6, column = 0)
ok.focus_set()
fen1.mainloop()
if __name__ == '__main__':
app = Application()
app.mainloop()
comment faire pour que lorsque je fais Aide/à propos de ..., je n'utilise pas le mainloop() de la fenetre pour qu'il n'y en ai qu'un dans le programme.
sebsauvage
25 mai 2007 à 10:28
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
25 mai 2007 à 10:28
def propos(self): fen1 = Tk()
Non, il faut que chaque fenêtre soit une classe.
Ensuite, dans ton gestionnaire d'évènement ( def propos(self): ) tu instancie ta fenêtre (f = maFenetre()).
Quant chaque fenêtre est définie comme une classe, le simple fait de l'instancier fera apparaître la fenêtre.
Et il ne faut pas utiliser plusieurs mainloop(). Il ne faut utiliser qu'un seul mainloop() (on le met généralement dans le main() comme tu as fait).
1 fenêtre = 1 classe
Sinon tu ne t'en sortira pas.
Todesfall
25 mai 2007 à 13:04
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
25 mai 2007 à 13:04
Pourrais-tu m'écrire le code car je ne vois pas comment faire ?S'il te plaît.
Merci
Merci
sebsauvage
25 mai 2007 à 13:56
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
25 mai 2007 à 13:56
Désolé, je n'en ai pas le temps.
Mais dans l'exemple que j'ai donné (la page), la définition une petite classe de fenêtre est donnée.
Prend exemple là dessus, et créé une classe pour chaque fenêtre de ton application.
Mais dans l'exemple que j'ai donné (la page), la définition une petite classe de fenêtre est donnée.
Prend exemple là dessus, et créé une classe pour chaque fenêtre de ton application.
Todesfall
26 mai 2007 à 16:38
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
26 mai 2007 à 16:38
Pourrais - tu juste écrire le code de la classe propos car je suis dans une galère là, plus je crois comprendre moins je comprends.
sebsauvage
26 mai 2007 à 16:40
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
26 mai 2007 à 16:40
Sais-tu ce qu'est une classe ?
Il est nécessaire d'apprendre à programme en orienté objet, sinon tu ne t'en sortira pas pour construire des interfaces graphiques.
Il est nécessaire d'apprendre à programme en orienté objet, sinon tu ne t'en sortira pas pour construire des interfaces graphiques.
Todesfall
27 mai 2007 à 08:16
- Messages postés
- 70
- Date d'inscription
- lundi 30 avril 2007
- Statut
- Membre
- Dernière intervention
- 17 septembre 2014
27 mai 2007 à 08:16
Non je ne vois pas trop à quoi sert une class.
sebsauvage
27 mai 2007 à 14:02
- Messages postés
- 32844
- Date d'inscription
- mercredi 29 août 2001
- Statut
- Modérateur
- Dernière intervention
- 21 octobre 2019
27 mai 2007 à 14:02
Dans ce cas, regarde du côté orienté objet.
Il y a des cours sur Python et la programmation orientée objet:
https://python.developpez.com/cours/
http://wikipython.flibuste.net/moin.py/Debuter
Il y a des cours sur Python et la programmation orientée objet:
https://python.developpez.com/cours/
http://wikipython.flibuste.net/moin.py/Debuter
17 mai 2018 à 00:17