GPIO输入激活tkinter

时间:2018-11-02 19:09:50

标签: python button input tkinter gpio

我想使用GUI中的按钮或按下GPIO来启动timer / count_up_down。 因此,如果按下GPIO20,则意味着与按下GUI中的开始按钮相同。 有谁知道我必须对GPIO进行检查的地方。我尝试了几件事,但没有任何效果。

import time
from Tkinter import *
from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop
from luma.core.virtual import viewport, sevensegment
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)

GPIO.setup(40, GPIO.IN)
GPIO.setup(38, GPIO.IN)

class ClockCount(Frame):
    def __init__(self, parent=None, **kw):        
        Frame.__init__(self, parent, kw)
        serial = spi(port=0, device=0, gpio=noop())
        device = max7219(serial, cascaded=1)
        global seg
        seg = sevensegment(device)
        self._start = 0.0        
        self._elapsedtime = 0.0
        self._running = 0
        self.counterh = 0
        self.countera = 0
        self.segh = "00"
        self.sega = "00"
        self.segt = "00"
        self.timestr = StringVar()
        self.ch = StringVar()
        self.ca = StringVar()
        self._check_gpio()
        self._update_counter()
        #if GPIO.input(40) == TRUE : print "test"

    def _update_counter(self):
        seg.text = str(self.segt)+str(self.segh)+str(self.sega)
        self.ch.set(str(self.counterh))
        self.ca.set(str(self.countera))

    def _check_gpio(self):
        if GPIO.input(40) == TRUE : print "test"
        if GPIO.input(40) == TRUE : self.Stop()

    def _update(self): 

        """ Update the label with elapsed time. """
        self._elapsedtime = time.time() - self._start
        self._setTime(self._elapsedtime)
        self._timer = self.after(50, self._update)
        seg.text = str(self.segt)+str(self.segh)+str(self.sega)
        if GPIO.input(40) == TRUE : print "test"
        if GPIO.input(40) == TRUE : self.Stop()
        if GPIO.input(38) == TRUE : self.Start()   

    def _setTime(self, elap):
        """ Set the time string to Minutes:Seconds:Hundreths """
        minutes = int(elap/60)
        seconds = int(elap - minutes*60.0)
        hseconds = int((elap - minutes*60.0 - seconds)*100)                
        self.timestr.set('%02d:%02d' % (minutes, seconds))
        if len(str(minutes)) < 2 : self.segt = "0" + str(minutes)
        else: self.segt = str(minutes)

    def Start(self):                                                     
        """ Start the stopwatch, ignore if running. """
        if not self._running:            
            self._start = time.time() - self._elapsedtime
            self._update()
            self._running = 1        

    def Stop(self):                                    
        """ Stop the stopwatch, ignore if stopped. """
        if self._running:
            self.after_cancel(self._timer)            
            self._elapsedtime = time.time() - self._start    
            self._setTime(self._elapsedtime)
            self._running = 0

    def Halbzeit(self):                                    
        """ Stop the stopwatch, ignore if stopped. """
        if not self._running: 
            self._start = time.time()         
            self._elapsedtime = 2700.00  
            self._setTime(self._elapsedtime)

    def Reset(self):                                  
        """ Reset the stopwatch. """
        if not self._running:
            self._start = time.time()         
            self._elapsedtime = 0.0    
            self._setTime(self._elapsedtime)

    def counth_up(self):
        self.counterh += 1
        if self.counterh > 99 : self.counterh = 0
        if len(str(self.counterh)) < 2 : self.segh = "0" + str(self.counterh)
        else: self.segh = str(self.counterh)
        self._update_counter()

    def counth_down(self):
        self.counterh -= 1
        if self.counterh < 0 : self.counterh = 0
        if len(str(self.counterh)) < 2 : self.segh = "0" + str(self.counterh)
        else: self.segh = str(self.counterh)
        self._update_counter()

    def counta_up(self):
        self.countera += 1
        if self.countera > 99 : self.countera = 0
        if len(str(self.countera)) < 2 : self.sega = "0" + str(self.countera)
        else: self.sega = str(self.countera)
        self._update_counter()

    def counta_down(self):
        self.countera -= 1
        if self.countera < 0 : self.countera = 0
        if len(str(self.countera)) < 2 : self.sega = "0" + str(self.countera)
        else: self.sega = str(self.countera)
        self._update_counter()

def main():
    root = Tk()
    w, h = root.winfo_screenwidth(), root.winfo_screenheight()  
    """root.geometry("%dx%d+0+0" % (w, h))"""
    root.geometry('1000x1000')  
    clockcount = ClockCount(root)

    Button(root, font=('Arial',30), width=7, text='Start', command=clockcount.Start).place(x=120, y=200)
    Button(root, font=('Arial',30), width=7, text='Stop', command=clockcount.Stop).place(x=350, y=200)
    Button(root, font=('Arial',30), width=7, text='Halbzeit', command=clockcount.Halbzeit).place(x=580, y=200)  
    Button(root, font=('Arial',30), width=7, text='Reset', command=clockcount.Reset).place(x=810, y=200)
    Button(root, font=('Arial',30), width=7, text='Heim +', command=clockcount.counth_up).place(x=250, y=520)   
    Button(root, font=('Arial',30), width=7, text='Heim -', command=clockcount.counth_down).place(x=250, y=600)
    Button(root, font=('Arial',30), width=7, text='Gast +', command=clockcount.counta_up).place(x=550, y=520)   
    Button(root, font=('Arial',30), width=7, text='Gast -', command=clockcount.counta_down).place(x=550, y=600)
    Button(root, font=('Arial',30), width=7, text='Quit', command=root.destroy).place(x=10, y=10)
    clock_label = Label(root, font="Arial 100 bold", fg="RED", textvariable=clockcount.timestr).place(x=400, y=20)
    counterhome_label = Label(root, font="Arial 100 bold", fg="RED", textvariable=clockcount.ch).place(x=320, y=350)
    counteraway_label = Label(root, font="Arial 100 bold", fg="RED", textvariable=clockcount.ca).place(x=620, y=350)

    #if GPIO.input(40) == TRUE : clockcount.Start()
    #if GPIO.input(40) == TRUE : print "test"

    root.mainloop()


if __name__ == '__main__':
    main()

非常感谢, br 罗伯特

0 个答案:

没有答案