2017-10-25 18 views
0

私は現在、2つのRaspberry Piを使用してアラームシステムを作成しようとしています。アラームは、piの1つに接続されたボタン(ブレッドボードによる)によってシミュレートされます。このボタンを押すと(アラームが起動されます)、tkinterで作成されたGUIのボタンを押して、アラームの時刻を30秒間表示します。 30秒以内にボタンが押されなければ、別のRPIにTCPが送信されます。tkinterのボタンを押してコードを停止する

これで、GUI上に「STOP ALARM」ボタンが押された場合に、piを停止するtkinterを持つGUIを作成するにはどうすればよいですか?

これは私が試したものです:

(彼らは非常に長くしているので、私はのbuttonPressed & sendtcpの機能が含まれていませんでした。)

import import RPi.GPIO as GPIO 
from tkinter import * 
import socket 
import sys 
import time 
def alarmstopped() 
    return True 
count = 0 
while True: 
    if buttonPressed() == True: #Button pressed 
     while True: 
      if alarmStoped() == True: #Stops 30sec count 
       break 
       count = 0 
      elif count >=30: 
       sendTCP() #Sends TCP to other RPI 
       time.sleep(0.2) 
       break 
      else: 
       count += 1 
       time.sleep(1) 
       print(count) 
       continue 
    else: 
     continue 
root = Tk() 
button = Button(master=root, cursor='hand2', text='stop alarm', command=alarmStoped) 
button.pack() 

Pastebin

は、あなたたちは私を助けることを願って私が間違いをしたら私の英語を訂正してください);

+0

あなたが助けが必要な部分を明確にすることはできますか?あなたはすでにアラームを有効にするボタンを持っていますか?また、ほとんどの場合、 'buttonPressed'の関数は必要ありません.Tkinterボタンの組み込みコマンド引数は、それを処理することができます。 – ividito

答えて

0

あなたはwhileループを一切したくありません。代わりに、アラームを使用するにはafterを使用し、停止するにはafter_cancelを使用します。 afterは、将来実行される機能をスケジュールします(たとえば、アラームをオンにする)。after_cancelは、そのジョブの実行を停止します。

ここでは10秒にアラームを設定することで、技術を示す簡単な例です:

import tkinter as tk 

def on_start_alarm(): 
    global alarm_id 
    alarm_id = root.after(10000, start_alarm) 
    alarm.configure(text="Alarm starting soon...") 

def on_stop_alarm(): 
    global alarm_id 
    alarm.configure(text="") 
    root.after_cancel(alarm_id) 

def start_alarm(): 
    alarm.configure(text='Alarm! Alarm!', foreground="red") 

root = tk.Tk() 

alarm = tk.Label(root, text="", width=20) 
start = tk.Button(root, text="Start", command=on_start_alarm) 
stop = tk.Button(root, text="Stop", command=on_stop_alarm) 

alarm.pack(side="top", fill="both", expand=True) 
start.pack(side="top") 
stop.pack(side="top") 

root.mainloop() 
+0

ブレッドボードを使用して自分のパイに接続されているボタンを押して、どのようにアラームを開始できるか知っていますか? [これは、ボタンをPythonに接続する方法です](https://pastebin.com/TjZi6WRw) – Tymo

+1

@Tymo:ラズベリーパイについては何も知らない。 Python関数を呼び出すことによってそれを行うと仮定すると、その関数を 'start_alarm'から呼び出します。そこにあなたが望むコードを置くことができます。 –

+0

助けてくれてありがとう、私はPiのボタンから入力を得るための余分な機能を作った。ありがとう! – Tymo

関連する問題