Bonjour
J'aimerai changer l'état d'une variable (de False a True) a l'aide d'un bouton.
Cordialement.
Bonjour
J'aimerai changer l'état d'une variable (de False a True) a l'aide d'un bouton.
Cordialement.
mavar est un booleen = vrai // clic sur bouton btn_changer si mavar = vrai alors mavar= faux sinon mavar=vrai fin
J'ai écrit ceci cela ne change rien quand j'appuie sur mon bouton
voici le message d'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if portouvert == False: portouvert = True
if portouvert == False: UnboundLocalError: local variable 'portouvert' referenced before assignment
Salut,
Cliquer sur un Button appelle un "callback" qui est, à priori, une fonction et si la variable portouvert n'a pas une durée de vie plus grande que la fonction impossible de la modifier suivant son état courant (elle n'existe pas en dehors de la fonction).
Lorsqu'on débute, on utilise des variables globales (dans ce cas là).
- W
Voici mon code dans connexion j'aimerai changer la variables.
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
86
87
88
89
90
91
92
93
94
95
96
97 # -*-coding:Utf-8 -* from tkinter import * import serial import time ser = serial.Serial() ser.baudrate = 115200 ser.port = 'COM10' #Commande portouvert = False def monter(): ser.write(b'G91\n') ser.write(b'G1 Z10.000 F1200\n') ser.write(b'G90\n') def descend(): ser.write(b'G91\n') ser.write(b'G1 Z-10.000 F1200\n') ser.write(b'G90\n') def demande_temp(): ser.write(b'M105\n') data = ser.readline() if data.startswith(b'ok T'): print(data) texte_temp.set("Temperature Extrudeuse : "+str(data[5:10])) while(portouvert == True): ser.write(b'M105\n') data = ser.readline() texte_temp.set("Temperature Extrudeuse : "+str(data[5:10])) if data.startswith(b'ok T'): print(data) def connexion(): ser.open() if portouvert == False: portouvert = True def deconnexion(): ser.close() portouvert = False #GUI root=Tk() root.title("Imprimante 3D") root.geometry("800x480") root.minsize(480, 260) root.config(background='#C9C3AB') #frame frpr = Frame(root, bg='#C9C3AB') frpr.pack(expand=YES) frcon = LabelFrame(frpr, text="Connexction", padx=20, pady=20) frcon.pack(fill="both", expand="yes") frtemp = LabelFrame(frpr, text="Température", padx=20, pady=20) frtemp.pack(fill="both", expand="yes") #Bp, Label, ... #frpr bp_10 = Button(frpr, text="10", font=("Courrier", 14),command=monter,bg='white',fg='#C9C3AB') bp_10.pack(pady=5,fill=X) b_10 = Button(frpr, text="-10", font=("Courrier", 14),command=descend,bg='white',fg='#C9C3AB') b_10.pack(pady=5,fill=X) s = Spinbox(frpr, from_=0, to=300) s.pack() #frcon bpconnexion = Button(frcon, text="Connecter", font=("Courrier", 14),command=connexion,bg='white',fg='#C9C3AB') bpconnexion.pack(pady=5,fill=X) bpdeconnexion = Button(frcon, text="Déconnecter", font=("Courrier", 14),command=deconnexion,bg='white',fg='#C9C3AB') bpdeconnexion.pack(pady=5,fill=X) #frtemp bptemp = Button(frtemp, text="Temperature", font=("Courrier", 14),command=demande_temp,bg='white',fg='#C9C3AB') bptemp.pack(pady=5,fill=X) texte_temp = StringVar() texte_temp.set("Température Extrudeuse : ") label_temp = Label(frtemp, textvariable=texte_temp, bg="grey") label_temp.pack(pady=5,fill=X) root.mainloop()
Salut,
Votre variable ne sert à rien puisque vous avez déjà ser auquel vous pouvez appliquer les méthode .open, .close et tester l'état via .is_open (voir la documentation de serial).
Si vous tenez à gérer l'état du port dans une variable à part, il faut apprendre à utiliser les variables globales (et ouvrir un tuto., dans le Swinnen, c'est ce chapitre).
- W
C'est vous qui programmez, donc vous avez pris soin de reproduire chez vous l'exemple donné dans la documentation pour vérifier que vous êtes capable de le faire fonctionner et qu'il fonctionne.
Si ser.is_open() sort un message d'erreur, il serait bon de l'indiquer (et de poster le code que vous avez réalisé)..
Mais ce message devrait quand même vous être familier car vous l'avez certainement rencontré lorsque vous avez fait les exercices proposés dans votre tuto. favori.
Ceci dit, comme on espère que les exemples de la documentation fonctionnent, une erreur devrait vous inciter à relire le code de l'exemple pour vérifier que vous avez bien tapé la même chose.
- W
Chez moi, si je fais:
çà fonctionne comme documenté et sans problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 >>> import serial >>> ser = serial.Serial() >>> ser.is_open False >>>
- W
Si vous avez déjà écrit des fonctions comme:
difficile de savoir quelle difficulté vous rencontrez.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 def demande_temp(): ser.write(b'M105\n') data = ser.readline() if data.startswith(b'ok T'): print(data) texte_temp.set("Temperature Extrudeuse : "+str(data[5:10]))
Surtout si vous ne postez pas le code que vous avez essayé de faire et que vous ne cherchez pas à comprendre pourquoi Python n'en veut pas.
note: programmer, c'est comme tout: on fait des erreurs, on essaie de comprendre pourquoi et on corrige.
- W
Il faut peut-être penser d'une manière un peu différente avec ser.is_open
Par exemple,
deviendrait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 def connexion(): ser.open() if portouvert == False: portouvert = True
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 def connexion(): if not ser.is_open(): ser.open()
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager