2017-10-25 2 views
0

나는 두 개의 Raspberry Pi를 사용하여 경보 시스템을 만들려고합니다. 경보는 pl의 하나에 연결된 버튼 (브레드 보드에 의한)에 의해 경보가 울리게하는 트리거입니다. 이 버튼을 누르면 (알람이 활성화됩니다) 사용자는 tkinter로 만든 GUI에서 버튼을 눌러 알람을 울리는 데 30 초가 걸립니다. 30 초 이내에 버튼을 누르지 않으면 TCP가 다른 RPI로 전송됩니다.tkinter의 버튼을 눌러 코드 중지

이제 질문 : tkinter를 사용하여 사용자가 GUI에서 '알람 중지'버튼을 누르면 TCP가 TCP를 전송하지 못하도록하는 GUI를 어떻게 만들 수 있습니까?

내가 뭘하려 :

이 (가 매우 긴이기 때문에 나는의 buttonPressed & sendtcp 기능을 포함하지 않았다.)

Pastebin

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() 
너희들이 나를 도울 수 있기를 바랍니다) 내가 실수를하면 내 영어를 바로 잡을 수있다.)

+0

당신이 도움을 필요로하는 부분을 명확히 수 :

여기에 10 초 알람을 설정하여 기술을 설명하는 간단한 예제가있다? 이미 알람을 울리도록 버튼이 있습니까? 또한,'buttonPressed' 함수를 거의 필요로하지 않는다면, Tkinter 버튼을위한 내장 명령 인자가 그것을 처리 할 수 ​​있습니다. – ividito

답변

0

while 루프를 전혀 원하지 않는다. 대신 알람을 시작하려면 after을 사용하고 중지하려면 after_cancel을 사용하십시오. after은 앞으로 실행할 기능을 예약합니다 (예 : 알람을 켜기). after_cancel은 작업 실행을 중지합니다.

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

브레드 보드를 사용하여 내 파이에 연결된 버튼을 눌러 알람을 시작하는 방법을 알고 계십니까? [이것은 파이썬으로 단추를 연결하는 방법입니다.] – Tymo

+1

@Tymo : 나는 나무 딸기 파이에 대해 아무것도 몰라요. 파이썬 함수를 호출하여이를 수행한다고 가정 할 때, 그 함수를'start_alarm'에서 호출하십시오. 거기에 원하는 코드를 넣을 수 있습니다. –

+0

도움을 주셔서 감사합니다. 필자가 Pi의 버튼에서 입력을 얻으려는 추가 기능을 만들었습니다. 감사! – Tymo

관련 문제