einen Loop mit einem Button unterbrechen

Fragen zu Tkinter.
Antworten
marouensassi
User
Beiträge: 2
Registriert: Dienstag 26. November 2019, 09:09

ich versuche die laufende Schleife in dem ( FunktionTest()) mit dem Button Stop zu Unterbrechen aber Funktionniert nicht ich brauche eure Hilfe Danke ; )


Code: Alles auswählen

import RPi.GPIO as gpio
import time as t
from tkinter import*





gpio.setmode(gpio.BCM)

gpio.setwarnings(False)


                 #''' INPUT  definieren  '''



gpio.setup(25, gpio.IN, pull_up_down = gpio.PUD_UP)# SENSOR1
gpio.setup(12, gpio.IN, pull_up_down = gpio.PUD_OFF) # SENSOR2
gpio.setup(16, gpio.IN, pull_up_down = gpio.PUD_DOWN) #SET
gpio.setup(20, gpio.IN, pull_up_down = gpio.PUD_DOWN) # RESET
gpio.setup(21, gpio.IN, pull_up_down = gpio.PUD_DOWN) # NOT-AUS

                  #''' OUTPUT  definieren '''


gpioList = [13,6,5,22,27,17,4]
gpio.setup(19, gpio.OUT)
gpio.output(19, gpio.HIGH)
for i in gpioList :
    gpio.setup(i, gpio.OUT)
    gpio.output(i, gpio.HIGH)

global notaus
notaus = 0





def on_closing():
   
      
    window.destroy()





   
def FunktionStop () :
   global notaus
   notaus = 1
   statusbar["text"]= "Block"




   
def Restart () :
   global notaus
   notaus = 0
   print(notaus)
   statusbar["text"] ="Restart"
      





def FunktionTest ():
   global notaus
   x = 4
   
   statusbar["text"] ="it works"
   while notaus== 0 and  x > 0 and gpio.input(21) == 1 :

                      if gpio.input(12) == 0  :
                          print("detected1")
                          gpio.output(27, gpio.HIGH)
                          Sensor= 1

                      if gpio.input(25) == 0 and Sensor == 1:
                          print ("detected2")


                          Sensor = 0
                          x = x-1
                          print(x)





window = Tk()
window.title("GUI")

#Variable Declare



#outputs
statusbar = Label(window, text="auf start drücken", width=25,height =5, borderwidth=15 ,relief = SUNKEN)
statusbar.grid(row= 6, column = 2)
# variable to store input


b1=Button(window, text="Sensor-Test",command =FunktionTest)
b1.grid(row=2, column = 2, padx= (100,5), pady=5)

b2=Button(window, text="Startwischen ",command =Restart)
b2.grid(row=3, column = 2, padx= (100,5), pady=5)

b3=Button(window, text="STOP ",command =FunktionStop)
b3.grid(row=4, column = 2, padx= (100,5), pady=5)


window.protocol("WM_DELETE_WINDOW", on_closing)
window.mainloop()  
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Und taeglich gruesst das Murmeltier. GUIs und Schleifen gehen nicht gut, und GPIOs und GUIs zu integrieren ist ein Thema, das dauernd wer will, aber niemand hinbekommt. Seufz.

Fuer dein konkretes Problem mit der while-Schleife (es gibt noch unglaublich viele andere Problem in deinem Programm, von Benamung ueber globaln Zustand bis hin zu wirklich komischen Leerzeilengebrauch) gibt es eine einfache Loesung: add_event_detect. Du solltest die Arbeit, die du da vollfuehrst, einfach in den (kurz zu haltenden!) Event-Callbacks durchfuehren. Damit laeuft das dann auch parallel zu deiner GUI.
Antworten