Отображение показаний датчика в tkinter - PullRequest
0 голосов
/ 06 августа 2020

У меня есть сопряженный датчик потока с raspberry PI. Я хочу, чтобы это показание обновлялось на tkinter gui каждую секунду. Пожалуйста, помогите мне с кодом.

import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
flowin =7
GPIO.setup(7,GPIO.IN)
rate=0
seconds=0
pulse=550
time_new = 0.0
#numlist=list()

while True:
    y=2
    time_new = time.time() + 1
    rate_cnt = 0
    #y=numlist.append(x)
    while time.time() <= time_new:
        x=GPIO.input(flowin)
        if y!=x:
            if GPIO.input(flowin)!= 0:
                rate+= 1
            y=x
    seconds+=1
    litre=rate/pulse
    minutes=seconds/60
    flowrate=litre/minutes
    #print("flowrate",flowrate)

1 Ответ

3 голосов
/ 06 августа 2020

Вы можете использовать thread для чтения показаний датчика и обновления StringVar, связанного с tkinter Label, чтобы показать flowrate.

Ниже приведен пример, основанный на вашем коде:

import RPi.GPIO as GPIO
import tkinter as tk
import time
import threading

def read_sensor():
    GPIO.setmode(GPIO.BOARD)
    flowin =7
    GPIO.setup(7,GPIO.IN)
    rate=0
    seconds=0
    pulse=550
    time_new = 0.0
    #numlist=list()

    while True:
        y=2
        time_new = time.time() + 1
        rate_cnt = 0
        #y=numlist.append(x)
        while time.time() <= time_new:
            x=GPIO.input(flowin)
            if y!=x:
                if GPIO.input(flowin)!= 0:
                    rate+= 1
                y=x
        seconds+=1
        litre=rate/pulse
        minutes=seconds/60
        flowrate=litre/minutes
        #print("flowrate",flowrate)
        # update the tkinter label via StringVar
        var.set(f'flowrate: {flowrate:10.2f}')

# create the thread
task = threading.Thread(target=read_sensor, daemon=True)

root = tk.Tk()

var = tk.StringVar()
lbl = tk.Label(root, textvariable=var, width=40, height=5, font=('Consolas', 24, 'bold'))
lbl.pack()

task.start() # start the reading thread
root.mainloop()
...