2017-08-11 6 views
0

まず、私は絶対初心者です。私は愚かな質問をすると申し訳ありません。 学校向けの小さなプログラムをコーディングしようとしています。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() 
+0

は2.7で[OK]を動作しているようだ、あなたは、Python 3.6を使用していますか? – droravr

+0

私はVisual Studio 2017を使用していますが、Python 3.6をデフォルトバージョンとしてサポートしていると思います。 – AlexN

答えて

0

Overheating以外のあなたはそれが"Machine already stopped"を印刷できるように印刷を可能にしていない再度決してことに注意してください。

だけで、同様enablePrint()else他の2つのオプションの句を追加します。

def Button_CircuitBreaker(): 
    global triggered 
    if triggered == False: 
     print("Overload! Breaking Circuit...") 
     blockPrint() 
    else: 
     enablePrint() 
     print("Machine already stopped") 
     blockPrint() 
    return 


def Button_Manual(): 
    global triggered 
    if triggered == False: 
     print("Machine was manually stopped") 
     blockPrint() 
     triggered = True 
    else: 
     enablePrint() 
     print("Machine already stopped") 
     blockPrint() 
     return 
+0

ああ..それは動作します..ありがとう!最初は最初のボタンをテストしようとしましたが、それは問題のようでした。 – AlexN

関連する問題