首先,如果我问愚蠢的问题,我是一个绝对的初学者和抱歉。 我尝试为学校编写一个小程序。Python全局变量如果语句不起作用
想象一下带有三个应急开关的电机。一个“过热”,一个“断路器”和一个“手动”开关都会停止电机。
在程序中,开关是由tkinter按钮在一个小GUI中模拟的。 如果你按下按钮,它应该输出任何模拟的案例。 如果电机“停止”但再次按下按钮(或新按钮),则应显示“机器已停止”消息。 但该程序的最后一部分不起作用。
我已经了解到Python中的变量是默认的本地变量,所以我尝试将变量“triggered”定义为全局变量。但我可能犯了一些错误。 如果我运行该程序,会出现第一条消息(例如“过热!”),但再次按下该按钮时会丢失第二条消息“机器已停止”。
你能告诉我我的错在哪?我试图谷歌它,但我不知道什么是错的。有时很难阅读线索或教程,因为我不是说英语的母语。
请告诉我,如果有任何伪代码。 正如我所说我是一个绝对的初学者,但我努力学习它。
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()
好像是你在使用Python 3.6 2.7工作确定,? – droravr
我使用的是Visual Studio 2017,我认为支持Python 3.6作为默认版本。 – AlexN