Yup but event, c'est pour des callbacks déclarés dans "bind".
Ceux passés en "command" sur un Button n'ont, par défaut, aucun paramètre.
- W
Yup but event, c'est pour des callbacks déclarés dans "bind".
Ceux passés en "command" sur un Button n'ont, par défaut, aucun paramètre.
- W
Si tu marques quoi dans ton script?
Quel est le message d'erreur?
Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tutoriels, ...)
- Tests déjà effectués
melissar... sorry, je crois que je raconte des conneries un peu partout depuis un momentwiztricks a totalement raison.
Pour les command, pas de event
en resume.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 def suivant(): deplacement(1) def precedent(): deplacement(-1)
Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tutoriels, ...)
- Tests déjà effectués
Oui mais du coup j'ai un autre message d'erreur :
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python32\lib\tkinter\__init__.py", line 1399, in __call__
return self.func(*args)
File "C:\Users\Mélissa\Desktop\Projet Programmation\Diaporama.py", line 62, in sUivant
deplacement(1)
File "C:\Users\Mélissa\Desktop\Projet Programmation\Diaporama.py", line 55, in deplacement
n = (n + dep) % limit
UnboundLocalError: local variable 'n' referenced before assignment
pour le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85 # Import du module csv import csv # Utilisation de la fonction commune : def extraction(fichiercsv): liste=[] fcsv=open(fichiercsv,'r') read=csv.reader(fcsv,delimiter=';') for ligne in read: liste.append(ligne) return liste # Extraction du bon fichier: liste=extraction("liste.csv") identifiants=[] i=0 while i<len(liste): identifiants.append(liste[i][0]) i+=1 from tkinter import * from os import * n=0 iD=identifiants[n] x=len(identifiants) # Créer des fonctions qui font varier le iD def suivant(): global n global iD global photo if n<x: iD=identifiants[n] photo=PhotoImage(file="C:/Users/Mélissa/Desktop/Projet Programmation/GIF/"+iD+".gif") n+=1 diapo.config(image=photo) print(n) def precedent(): global n global iD global photo global diapo if n>-1: iD=identifiants[n] photo=PhotoImage(file="C:/Users/Mélissa/Desktop/Projet Programmation/GIF/"+iD+".gif") diapo.config(image=photo) def deplacement(dep): #... limit = len(identifiants) n = (n + dep) % limit iD=identifiant[n] photo=PhotoImage(file="C:/Users/Mélissa/Desktop/Projet Programmation/GIF/"+iD+".gif") diapo.config(image=photo) print(n) def sUivant(): deplacement(1) def précédent(): deplacement(-1) # Création de l'interface graphique # Afficher la photo et la faire varier grâce aux 2 boutons (clic engendre identifiant +1) fen=Tk() fen.title("Diaporama") filename="C:/Users/Mélissa/Desktop/Projet Programmation/GIF/"+iD+".gif" photo=PhotoImage(file=filename) diapo=Label(fen,image=photo) diapo.pack() bou1=Button(fen,text="Photo suivante",command=sUivant) bou1.pack(side=RIGHT) bou2=Button(fen,text="Photo précédente",command=précédent) bou2.pack(side=LEFT) fen.mainloop()
hmm alors je disais, Tu dois avoir:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 def deplacement(dep): global n, photo limit = len(identifiants) n = (n + dep) % limit iD=identifiants[n] photo=PhotoImage(file="C:/Users/Mélissa/Desktop/Projet Programmation/GIF/"+iD+".gif") diapo.config(image=photo) print(n) def suivant2(): deplacement(1) def precedent2(): deplacement(-1)
Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tutoriels, ...)
- Tests déjà effectués
HALLELUJAH ça fonctionne
Merci beaucoup !
J'ai par contre une petite question :
Je comprends pas bien ce que fais :
on ajout à n la valeur du paramètre qu'on lui donne, donc dans le cas de suivant, on lui ajoute 1 à chaque clic sur le bouton, mais que signifie le % limit ?n = (n + dep) % limit
(Je sais que % permet de garder des nombres positifs, mais à quoi sers le "limit", enfin je comprends pas bien pourquoi on le met ici)
Salut,
Avec un nombre "limit" de photos "n" doit toujours être dans l'intervalle [0..limit-1]. n = (n + dep) % limit "réalise" cette contrainte en imposant à "n" d'être le "reste" de ("n" + def) divisé par "limit".
Judicieux, n'est il pas?
- W
En effet, judicieux, mais difficile à trouver seule... surtout quand on est novice.
Question bonus :
Comment demande-t-on à l'utilisateur de donner le chemin d'un fichier?
(en gros le "ouvrir")
Salut,
Ben comme toutes les applications GUI: on réalise un menu File=>Open qui lance le widget filedialog qui va bien... comme par exemple dans la discussionComment demande-t-on à l'utilisateur de donner le chemin d'un fichier
- W
Oulah je crois que je vais m'abstenir, c'est bien compliqué !
Merci de vos réponses !
"A pythonien vaillant, aucun script d'impossible", bref, pour dire que ce n'est pas "complique", et meme bien plus simple que ce que tu as fait jusqu'ici.
Le minimal c'est:et tu as ici un exemple plus complet avec les infos sur le modules
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 import tkFileDialog filename = tkFileDialog.askopenfilename() filename2 = tkFileDialog.asksaveasfilename()
Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
CONTENU D'UNE QUESTION
Exemples:
- Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
- Code source du morceau de programme où il y a un bogue
- Ligne de code sur laquelle le bogue apparaît
- Erreur complète retournée pas l'interpréteur Python
- Recherche déjà effectuée (FAQ, Tutoriels, ...)
- Tests déjà effectués
euhhh
pourquoi ça me dit "ImportError: No module named tkFileDialog" ??
Petits changements d'import avec Python 3 par rapport à Python 2.
Puisque vous avez déjà importer tkinter (from tkinter import *) utilisez:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #Python 2.x import Tkinter import tkFileDialog #Python 3.x import tkinter #import tkinter.filedialog
@+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 filename = filedialog.askopenfilename() filename2 = filedialog.asksaveasfilename()
Ah d'accord, ça marche en effet.
Mais si je veux lire le chemin du fichier renseigné en "filename = filedialog.askopenfilename()" comment puis-je faire?
Code : Sélectionner tout - Visualiser dans une fenêtre à part filename =
Voici mon code :
Je veux que la variable "chemin" devienne le chemin de la localisation du fichier GIF (suis se situe dans un dossier sur mon bureau).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 # Import du module csv import csv # Utilisation de la fonction commune : def extraction(fichiercsv): liste=[] fcsv=open(fichiercsv,'r') read=csv.reader(fcsv,delimiter=';') for ligne in read: liste.append(ligne) return liste liste=extraction(input("Donner le nom du fichier contenant vos données (identifiants, nom, prénom) : ")) identifiants=[] i=0 while i<len(liste): identifiants.append(liste[i][0]) i+=1 np=[] j=0 while j<len(liste): del(liste[j][0]) np=liste j+=1 print(np) chemin=filedialog.askopenfilename() from tkinter import * from os import * n=0 iD=identifiants[n] x=len(identifiants) # Créer des fonctions qui font varier le iD def deplacement(dep): #... global n, photo limit = len(identifiants) n = (n + dep) % limit iD=identifiants[n] photo=PhotoImage(file=chemin+"/"+iD+".gif") diapo.config(image=photo) def suivant(): deplacement(1) def precedent(): deplacement(-1) # Création de l'interface graphique # Afficher la photo et la faire varier grâce aux 2 boutons (clic engendre identifiant +1) fen=Tk() fen.title("Diaporama") filename=chemin+"/"+iD+".gif" photo=PhotoImage(file=filename) diapo=Label(fen,image=photo, height=400,width=400) diapo.pack() bou1=Button(fen,text="Photo suivante >",command=suivant) bou1.pack(side=RIGHT) tex1=Label(fen, text=np[0]) bou2=Button(fen,text="< Photo précédente",command=precedent) bou2.pack(side=LEFT) fen.mainloop()
je veux également que "chemin" soit renseigné par l'utilisateur.
Si j'écris mon programme comme ceci, j'ai un message d'erreur qui me dit :
Pourquoi ça ne fonctionne pas ?Traceback (most recent call last):
File "C:\Users\Mélissa\Desktop\Projet Programmation\DiapoFik.py", line 32, in <module>
chemin=filedialog.askopenfilename()
NameError: name 'filedialog' is not defined![]()
Normal : filedialog est importé après.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 chemin=filedialog.askopenfilename() from tkinter import * from os import *
Mettez vos imports au début pour le moment.
Ouuupsss...
Je remarque que l'on ne peut pas sélectionner juste le chemin d'un dossier ... oups
désolée pour l'erreur bete...
y'a-t-il un moyen d'avoir le chemin du dossier GIF?
Si vous voulez juste un répertoire vous pouvez utiliser tkinter.filedialog.askdirectory().
Ceci dit filedialog vous donne déjà le chemin complet, il vous suffit de savoir l'exploiter: chemin = os.path.dirname(fichier)
@+
Merci de vos réponses :
De toute façon je me retrouve bloqué puisque je veux utiliser ce nom et il faut changer les slashs par des antislashs... tant pis, je ferais autrement.
Par contre, si je souhaite afficher le nom et prénom correspondant à chaque photo, sachant que un identifiant=une photo=un prénom=un nom.
J'ai essayé de faire celà :
Maix evidement ça ne fonctionne pas... Je pense qu'il faut que je lie un "event" avec mes 2 boutons pour faire varier le texte de +1 ou -1 (en fonction de l'appuie sur le bouton suivant ou precedent.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 # Import du module csv import csv # Utilisation de la fonction commune : def extraction(fichiercsv): liste=[] fcsv=open(fichiercsv,'r') read=csv.reader(fcsv,delimiter=';') for ligne in read: liste.append(ligne) return liste liste=extraction(input("Donner le nom du fichier contenant vos données (identifiants, nom, prénom) : ")) from tkinter import * from os import * identifiants=[] i=0 while i<len(liste): identifiants.append(liste[i][0]) i+=1 np=[] j=0 while j<len(liste): del(liste[j][0]) np=liste j+=1 print(np) chemin=(input("Entrez le chemin du fichier GIF : ")) n=0 iD=identifiants[n] x=len(identifiants) # Créer des fonctions qui font varier le iD def deplacement(dep): #... global n, photo limit = len(identifiants) n = (n + dep) % limit iD=identifiants[n] photo=PhotoImage(file=chemin+"/"+iD+".gif") diapo.config(image=photo) def suivant(): deplacement(1) def precedent(): deplacement(-1) # Création de l'interface graphique # Afficher la photo et la faire varier grâce aux 2 boutons (clic engendre identifiant +1) fen=Tk() fen.title("Diaporama") filename=chemin+"/"+iD+".gif" photo=PhotoImage(file=filename) diapo=Label(fen,image=photo, height=400,width=400) diapo.pack() bou1=Button(fen,text="Photo suivante >",command=suivant) bou1.pack(side=RIGHT) bou2=Button(fen,text="< Photo précédente",command=precedent) bou2.pack(side=LEFT) if suivant: k=0 tex1=Label(fen,text=np[k]) k+=1 else: l=len(np) tex1.config(text=np[l]) l-=1 fen.mainloop()
Le hic, c'est que je n'ai jamais créé d'événement...![]()
Partager