Как отображать результаты измерений в Python tkinter GU - новые значения каждую секунду - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь измерить какое-то значение с помощью датчиков и отобразить его с помощью графического интерфейса Python tkinter.Мне удалось создать графический интерфейс и программу для измерения.Теперь я хочу отобразить данные в графическом интерфейсе и, поскольку я получаю новые значения каждую секунду, я хочу обновить экран новыми значениями.Я видел, чем я могу использовать textvariable.Но как это инициализировать?при запуске программы, так как в начале нет выходных данных, отображается ошибка.Как это сделатьлюбые предложения, пожалуйста.наконец, как обновлять каждую секунду?

from tkinter import *
import tkinter.font
import numpy as np
import pigpio

win = Tk()
myFont = tkinter.font.Font(family = 'Verdana', size = 20, weight = 'bold')

win.geometry('800x480')
win.configure(background='#CD5C5C')

#------------------------------------------------------main program ----------------------------------#
def readSensors():
    #function body
    # output is a list with name measuredValues
    #measuredValues contains total 4 values as I have 4 sensors
    win.after(1000, readSensors)     #calling the function every second

#label names variable
output_1= StringVar()
output_2 = StringVar()
output_3 = StringVar()
output_4 = StringVar()

value0 = str(measuredValues[0])
value1= str(measuredValues[1])
value2 = str(measuredValues[2])
value3 = str(measuredValues[3])

output_1.set (value0)
output_2.set (value1)
output_3.set (value2)
output_4.set(value3)

#Labels
# i used textvariable to to measured values. but doesn't work so far
#display values
output_1_label = Label(win, textvariable = output_1,height =2, width = 12)
output_1_label.place(x=200, y=100)

output_2_label = Label(win, textvariable = output_2, height =2, width = 12)
output_2_label.place(x=200, y=200)

output_3_label = Label(win, textvariable = output_3,height =2, width = 12)
output_3_label.place(x=200, y=300)

output_4_label = Label(win, textvariable = output_4, height =2, width = 12)
output_4_label.place(x=200, y=400)

#how to update the window with new data?
win.after(1000, readSensor)
win.mainloop()

1 Ответ

1 голос
/ 02 июля 2019

Вам необходимо обновить переменные, установленные как textvariables, с последними считанными значениями датчика:

Примерно так - показания датчика были заменены на случайно выбранное значение для имитации новых показаний данных:

import tkinter as tk
import random


def readSensors():
    output_1.set(random.choice([0, 1, 2, 3, 4, 5]))
    output_2.set(random.choice([0, 1, 2, 3, 4, 5]))
    output_3.set(random.choice([0, 1, 2, 3, 4, 5]))
    output_4.set(random.choice([0, 1, 2, 3, 4, 5]))
    win.after(1000, readSensors)


win = tk.Tk()

win.geometry('800x480')
win.configure(background='#CD5C5C')

output_1 = tk.StringVar()
output_2 = tk.StringVar()
output_3 = tk.StringVar()
output_4 = tk.StringVar()

measuredValues = [0, 1, 2, 3, 4, 5]
value0 = str(measuredValues[0])
value1 = str(measuredValues[1])
value2 = str(measuredValues[2])
value3 = str(measuredValues[3])

output_1.set(value0)
output_2.set(value1)
output_3.set(value2)
output_4.set(value3)

output_1_label = tk.Label(win, textvariable=output_1, height=2, width=12)
output_1_label.place(x=200, y=100)

output_2_label = tk.Label(win, textvariable=output_2, height=2, width=12)
output_2_label.place(x=200, y=200)

output_3_label = tk.Label(win, textvariable=output_3, height=2, width=12)
output_3_label.place(x=200, y=300)

output_4_label = tk.Label(win, textvariable=output_4, height=2, width=12)
output_4_label.place(x=200, y=400)

win.after(1000, readSensors)
win.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...