首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每x秒更新一次从api拉取的变量

问每x秒更新一次从api拉取的变量
EN

Stack Overflow用户
提问于 2021-07-27 11:04:41
回答 2查看 51关注 0票数 0

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

代码语言:javascript
复制
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()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-27 11:30:01

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

代码语言:javascript
复制
root.after(<time in millisecond>,<function>)

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

代码语言:javascript
复制
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()
票数 0
EN

Stack Overflow用户

发布于 2021-07-27 11:38:45

你已经很接近了。需要使用IntVar()和set()方法来设置变量的值。请阅读本文以了解更多信息here

代码语言:javascript
复制
from Tkinter import *

def start():
    Inv = Tk()
    Inv.geometry("200x200")
data =500 # value from API 
    stats = IntVar() 
stats.set(data) #Set values to 500
print stats.get() # this will print 500

    EtkI2=Label(Inv, textvariable=stats).pack()
 
    # change the stats value after 5 seconds
    Inv.after(5000, stats.set, 100)

    # start the event loop
    Inv.mainloop()


start()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68538443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档