我想要做的是从一个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()发布于 2021-07-27 11:30:01
您可以简单地使用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()发布于 2021-07-27 11:38:45
你已经很接近了。需要使用IntVar()和set()方法来设置变量的值。请阅读本文以了解更多信息here
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()https://stackoverflow.com/questions/68538443
复制相似问题