Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 1, 2022 08:53:24

azat1989
Зарегистрирован: 2022-04-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter обновление выводимых данных

Добрый день

Нужна помощь, признаюсь сразу только две недель как установил Питон и начал изучать вообще программирование. Ситуация такая есть приборы управление системами отопления ZONT, хочется получать с приборов данные в “красивом” виде, с фоновым рисунком помещения, котлов и т.д.

Получаю данные в json через API (для меня пока это просто буквы латинского алфавита)

вот до чего дошел я сейчас (понимаю что в json можно получать параметры по запроса, но для меня пока это сложно), сделал по простому (как мне сказали - пытаюсь изобрести велосипед), но главное это работает)))
import requests
import time
#import os
#from bs4 import BeautifulSoup
def f():

url = 'https://zont-online.ru/api/devices'
data = {'load_io': True}

headers = {'X-ZONT-Client': ‘main@mail’}
result = requests.post(url, json=data, auth'demo', ‘demo’), headers=headers).text


string=result.replace('“', ”“)

#print(string)

index = string.find(”20522:{curr_temp")
temp = float(string)

index1 = string.find(“20524:{curr_temp”)
temp1 = float(string)

index2 = string.find(“20525:{curr_temp”)
temp2 = float(string)

print ('температура с гидрострелки:', temp2)
print ('температура обратки:', temp)
print ('температура котельной:', temp1)
print ('разница подачи и обратки', round(temp2-temp,1))

while True:
time.sleep(1)
f()

далее подключил tkinter (только вчера узнал об этом модуле)

from tkinter import *
import requests

room = Tk()

#room = ‘#ffffff’
room.title('МФТ')
room.geometry('400x400')

room.resizable(width=False, height=False)

url = 'https://zont-online.ru/api/devices'
data = {'load_io': True}

headers = {'X-ZONT-Client': ‘main@mail’}
result = requests.post(url, json=data, auth'demo', ‘demo’), headers=headers).text

string=result.replace('“', ”“)

#print(string)

index = string.find(”20522:{curr_temp")
temp = string


title = Label(room, text=temp, font=“Arial 50”, fg='#CC0000')
title.pack()

room.mainloop()

вот теперь вопрос: Как сделать чтобы данные (температура обновлялась в окне)
данных планирую выводить все что получаю

З.Ы. если не сложно, можно без подколов и намеков, подсказать возможно это сделать и как именно

Офлайн

#2 Апрель 1, 2022 12:19:35

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

tkinter обновление выводимых данных

[code python]между этимитегами вставлять код[/code]

azat1989
вот теперь вопрос: Как сделать чтобы данные (температура обновлялась в окне)

воспользуйтесь методом after(интервал_повторения_ms, функция_которую_нужно выполнить)

например
 import tkinter as tk
def f():
    print('Hello')
    root.after(1000, f)
root = tk.Tk()
f()
root.mainloop()

Офлайн

#3 Апрель 9, 2022 09:08:00

azat1989
Зарегистрирован: 2022-04-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter обновление выводимых данных

xam1816
root.after(1000, f)
 from tkinter import *
import requests
import json
root = Tk()
root.geometry('500x500')
root.resizable(width=False, height=False) 
c = Canvas(root, width=500, height=500)
c.pack()
url = 'https://zont-online.ru/api/devices'
data = {'load_io': True}
headers = {'X-ZONT-Client': 'your@email'}
result = requests.post(url, json=data, auth=('demo', 'demo'), headers=headers).json()
data = result['devices'][7]
t1 = data['io']['z3k-state']['4263']['curr_temp']
t2 = data['io']['z3k-state']['4267']['curr_temp']
t3 = data['io']['z3k-state']['4269']['curr_temp']
c.create_text(150, 100, text=t1, font=('Arial','50'), fill = 'red')
c.create_text(150, 150, text=t2, font=('Arial','50'), fill = 'blue')
c.create_text(150, 200, text=t3, font=('Arial','50'), fill = 'green')
root.mainloop()

вот мой код, данные о температуре (показания) обновляются (строка - result json)
в какую строку вставить after чтобы данные в окне обновлялись

Офлайн

#4 Апрель 9, 2022 10:36:26

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

tkinter обновление выводимых данных

  
from tkinter import *
import requests
import json
 
def temperature_update():
    t1, t2, t3 = get_temperature()
    display_temperature(t1, t2, t3)
    root.after(1000, temperature_update)
 
def get_temperature():
    url = 'https://zont-online.ru/api/devices'
    data = {'load_io': True}
    headers = {'X-ZONT-Client': 'your@email'}
    result = requests.post(url, json=data, auth=('demo', 'demo'), headers=headers).json()
    data = result['devices'][7]
    t1 = data['io']['z3k-state']['4263']['curr_temp']
    t2 = data['io']['z3k-state']['4267']['curr_temp']
    t3 = data['io']['z3k-state']['4269']['curr_temp']
    return t1, t2, t3
 
def display_temperature(t1, t2, t3):
    c.create_text(150, 100, text=t1, font=('Arial', '50'), fill='red')
    c.create_text(150, 150, text=t2, font=('Arial', '50'), fill='blue')
    c.create_text(150, 200, text=t3, font=('Arial', '50'), fill='green')
 
root = Tk()
root.geometry('500x500')
root.resizable(width=False, height=False)
c = Canvas(root, width=500, height=500)
c.pack()
 
temperature_update()
 
root.mainloop()

Офлайн

#5 Апрель 9, 2022 12:49:54

azat1989
Зарегистрирован: 2022-04-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter обновление выводимых данных

Спасибо большое

только температура (число) накладывается поверх предыдущей

Офлайн

#6 Апрель 9, 2022 22:17:49

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1359
Репутация: +  119  -
Профиль   Отправить e-mail  

tkinter обновление выводимых данных

azat1989
только температура (число) накладывается поверх предыдущей
  
from tkinter import *
import requests
 
def temperature_update():
    t1, t2, t3 = get_temperature()
    print(t1, t2, t3)
    display_temperature(t1, t2, t3)
    root.after(60000, temperature_update)
 
def get_temperature():
    try:
        url = 'https://zont-online.ru/api/devices'
        data = {'load_io': True}
        headers = {'X-ZONT-Client': 'your@email'}
        result = requests.post(url, json=data, auth=('demo', 'demo'), headers=headers).json()
        data = result['devices'][7]
        t1 = data['io']['z3k-state']['4263']['curr_temp']
        t2 = data['io']['z3k-state']['4267']['curr_temp']
        t3 = data['io']['z3k-state']['4269']['curr_temp']
        return t1, t2, t3
    except Exception as e:
        print(e)
        return None, None, None
 
def display_temperature(t1, t2, t3):
    c.itemconfigure(sensor1_value_text, text=t1)
    c.itemconfigure(sensor2_value_text, text=t2)
    c.itemconfigure(sensor3_value_text, text=t3)
 
root = Tk()
root.geometry('500x500')
root.resizable(width=False, height=False)
c = Canvas(root, width=500, height=500)
sensor1_value_text = c.create_text(150, 100, text='###', font=('Arial', '50'), fill='red')
sensor2_value_text = c.create_text(150, 150, text='###', font=('Arial', '50'), fill='blue')
sensor3_value_text = c.create_text(150, 200, text='###', font=('Arial', '50'), fill='green')
c.pack()
temperature_update()
root.mainloop()

Офлайн

#7 Апрель 10, 2022 13:01:15

azat1989
Зарегистрирован: 2022-04-01
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

tkinter обновление выводимых данных

xam1816
fill='red'

Отлично

Спасибо за помощь)
давно по форумам брожу, все лишь дают список того что мне нужно учить, а ты реально и без намеков помог

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version