D'abord, je suis un débutant absolu et désolé si je pose des questions stupides. J'essaie de coder un petit programme pour l'école. Imaginez un moteur avec trois interrupteurs d'urgence.Python global var dans If déclaration ne fonctionne pas
Imaginez un moteur avec trois interrupteurs d'urgence. Un "surchauffeur", un "disjoncteur" et un interrupteur "manuel" qui arrêtent tous le moteur.
Dans le programme, les commutateurs sont simulés par des boutons tkinter dans une petite interface graphique. Si vous appuyez sur le bouton, il devrait sortir quel que soit le cas simulé. Si le moteur "s'est arrêté" mais qu'un bouton (ou un nouveau bouton) est à nouveau enfoncé, un message "Machine déjà arrêtée" doit apparaître. Mais cette dernière partie du programme ne fonctionne pas.
J'ai appris que les vars en Python sont locaux par défaut et j'ai donc essayé de définir le var "triggered" comme global. Mais j'ai probablement fait des erreurs. Si j'exécute le programme, le premier message (par exemple "Surchauffe!") Apparaît mais le deuxième message "Machine déjà arrêtée" est manquant quand on appuie à nouveau sur le bouton.
Pouvez-vous me dire où est ma faute? J'ai essayé de google mais je ne sais pas ce qui ne va pas. Parfois, il est difficile de lire des discussions ou des tutoriels parce que je ne suis pas anglophone.
Et s'il vous plaît dites-moi s'il y a un pseudo-code là-dedans. Comme je l'ai dit je suis un débutant absolu mais j'essaye de l'apprendre.
from tkinter import *
import sys, os
root = Tk()
root.title("Control Panel")
root.geometry("400x200")
app = Frame(root)
app.grid()
# Vars can be used later
overheat = False
# Stops motor if temperature is too high
circuitbreaker = False
# Stops if current flow is too high
manual = False
# Stops when switch is triggered manually
global triggered
triggered = False
# Returns True if one emergency unit has triggered
def Button_Overheat():
global triggered
if triggered == False:
triggered = True
print("Overheating!")
blockPrint()
else:
enablePrint()
print("Machine already stopped")
blockPrint
return
button_overheat = Button(app, text = "Overheat", command = Button_Overheat)
button_overheat.grid()
def Button_CircuitBreaker():
global triggered
if triggered == False:
print("Overload! Breaking Circuit...")
blockPrint()
else:
print("Machine already stopped")
blockPrint()
return
button_cicuitbreaker = Button(app, text = "Circuitbreaker", command = Button_CircuitBreaker)
button_cicuitbreaker.grid()
def Button_Manual():
global triggered
if triggered == False:
print("Machine was manually stopped")
blockPrint()
triggered = True
else:
print("Machine already stopped")
blockPrint()
return
button_manual = Button(app, text = "Turn off manually", command = Button_Manual)
button_manual.grid()
def blockPrint():
sys.stdout = open(os.devnull, 'w')
def enablePrint():
sys.stdout = sys.__stdout__
mainloop()
semble fonctionner ok sur 2.7, vous utilisez Python 3.6? – droravr
J'utilise Visual Studio 2017, je pense que Python 3.6 est la version par défaut. – AlexN