首页 > 解决方案 > 每 x 秒更新从 api 提取的变量

问题描述

我要做的是从 API 中获取一个数字,并使用 tkinter 在屏幕上每 60 秒更新一次该数字。我可以很好地通过 API 进行编号,只是在弄清楚如何更新它时遇到了麻烦。

from tkinter import *
import requests
import json

def getInfo(call):
        r = requests.get(call)
        return r.json()

key = " "
uuid = " "
url = f"https://api.hypixel.net/player?key={key}&uuid={uuid}"
data = getInfo(url)
uhcWins = "UHC Wins: " + str(data["player"]["stats"]["Duels"]["uhc_duel_wins"])

root = Tk()
root.title('Test Title')
root.geometry("500x500")

my_frame = Frame(root, width=500, height=200)
my_frame.pack(pady=20, ipady=20, ipadx=20)

my_label = Label(my_frame, text=uhcWins, font=("Helvetica", 40), fg="#09d2f6")
my_label.pack(pady=20)

root.mainloop()

标签: pythontkinter

解决方案


您可以简单地使用root.after函数。以下是如何实现:

root.after(<time in millisecond>,<function>)

对于您的代码,您可以这样做:

from tkinter import *
import requests
import json

def getInfo():
    data = requests.get(url).json()
    my_label.config(text="UHC Wins: " + str(data["player"]["stats"]["Duels"]["uhc_duel_wins"]))
    root.after(60000,getInfo)
    #In every 60 second it will call the get info function and change the context of my_label

root = Tk()
root.title('Test Title')
root.geometry("500x500")

my_frame = Frame(root, width=500, height=200)
my_frame.pack(pady=20, ipady=20, ipadx=20)

my_label = Label(my_frame, font=("Helvetica", 40), fg="#09d2f6")
my_label.pack(pady=20)

key = " "
uuid = " "
url = f"https://api.hypixel.net/player?key={key}&uuid={uuid}"
data = getInfo()

root.mainloop()

推荐阅读