まず、私は絶対初心者です。私は愚かな質問をすると申し訳ありません。 学校向けの小さなプログラムをコーディングしようとしています。If文のPythonグローバル変数は動作しません
3つの非常スイッチがあるモーターを想像してください。 「過熱」、「サーキットブレーカ」および「手動」スイッチウィッチはすべてモータを停止させます。
このプログラムでは、スイッチは小さなGUIのtkinter-buttonsによってシミュレートされます。 ボタンを押すと、シミュレートされたどのような場合でも出力されます。 モータが「停止」ボタン(または新しいボタン)をもう一度押すと、「マシンはすでに停止しました」というメッセージが表示されます。 しかし、プログラムの最後の部分は動作しません。
私は、Pythonのvarsがデフォルトでローカルであることを知ったので、var "triggered"をグローバルとして定義しようとしました。しかし、おそらく私はいくつかの間違いを犯しました。 プログラムを実行すると、最初のメッセージ(たとえば "Overheating!")が表示されますが、もう一度ボタンを押すと2番目のメッセージ "Machine already stopped"が表示されません。
私の不具合はどこですか?私はそれをGoogleにしようとしたが、何が間違っているのか分からない。私は英語のネイティブではないので、スレッドやチュートリアルを読むのが難しい場合もあります。
そこに擬似コードがあるかどうか教えてください。 私が言ったように、私は絶対初心者ですが、私はそれを学ぶのが大変です。
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()
は2.7で[OK]を動作しているようだ、あなたは、Python 3.6を使用していますか? – droravr
私はVisual Studio 2017を使用していますが、Python 3.6をデフォルトバージョンとしてサポートしていると思います。 – AlexN