Как обновить sh функцию каждый час в tkinter? - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь создать простую программу, которая получает информацию из API и отображает ее на python GUI с помощью tkinter. До сих пор я был в состоянии сделать это, но новая задача состоит в том, чтобы информация, собранная из API, обновлялась sh каждый час. По сути, мне нужно, чтобы функция data() перезапускалась каждый час, чтобы информация об GUI обновлениях.

from tkinter import *
import requests

def data():
    url = requests.get("https://stats.foldingathome.org/api/donor/PointofHorizon")
    json = str((url.json()))

    i = json.count(',')
    data = json.split(",")

    score = data[i]
    score = score.replace(" 'credit': ","")
    score = score.replace("}","")

    unit = data[0]
    unit = unit.replace("{'wus': ","")

    scores = Label(app, text = score)
    units = Label(app, text =  unit)

    scores.pack()
    units.pack()    

app = Tk()
app.geometry("500x200")
title = Label(app,text = "Folding Score")
title.pack()

Я огляделся и не смог найти способ, который работает для меня, было бы замечательно, если бы кто-то мог направить меня в правильном направлении. Я все еще учусь и все.

1 Ответ

2 голосов
/ 23 марта 2020

Я думаю, вы ищете метод after в tkinter. Я изменил функцию data для обновления sh данных на виджетах. Я переместил код, который создал метки, за пределы функции refresh_data. Как только виджеты были созданы, я вызвал функцию refresh_data, чтобы поместить информацию в виджеты. Эта функция сообщает tkinter, что нужно подождать час, прежде чем запустить его снова, что создаст al oop.

from tkinter import *
import requests

def refresh_data():
    url = requests.get("https://stats.foldingathome.org/api/donor/PointofHorizon")
    json = str((url.json()))

    i = json.count(',')
    data = json.split(",")

    score = data[i]
    score = score.replace(" 'credit': ","")
    score = score.replace("}","")

    unit = data[0]
    unit = unit.replace("{'wus': ","")

    scores.config(text=score)
    units.config(text=unit)

    app.after(3600000, refresh_data) #3600000 milliseconds in an hour

app = Tk()
app.geometry("500x200")
title = Label(app,text = "Folding Score")
title.pack()

scores = Label(app)
units = Label(app)


scores.pack()
units.pack()

refresh_data()

app.mainloop()
...