我正在尝试创建一个自动更新板球比赛得分的tk小部件。这是我的代码。但它不是自动更新。 请帮帮我。
import requests
from bs4 import BeautifulSoup
from tkinter import *
from tkinter import ttk
import time, threading
def scrape_cric():
#this below link can be any link of an ongoing match.
page = 'http://www.cricbuzz.com/live-cricket-scores/18733/engu19-vs-bdeshu19-5th-place-playoff-semi-final-2-icc-under-19-world-cup-2018'
r = requests.get(page)
soup = BeautifulSoup(r.text, 'lxml')
score_1 = soup.find('div', {'class':'cb-min-bat-rw'})
score = soup.find('span', {'class':'cb-font-20 text-bold'})
return score.text
def display_Score():
root = Tk()
top_frame = Frame(root)
bottom_frame = Frame(root)
Label1 = Label(top_frame, text = scrape_cric())
Label1.pack()
top_frame.pack()
mainloop()
threading.Timer(10, display_Score()).start()
display_Score()
在执行时显示分数,不会自动更新。关闭tk小部件后,它会再次显示更新的分数。我不想关闭它。它应该更新,而不是关闭它。
答案 0 :(得分:1)
导致此问题的原因是您在每次调用函数时都创建了新的根Tk而不是单独更改文本
解决这个问题的方法是:
root = Tk()
top_frame = Frame(root)
label = Label(top_frame)
top_frame.pack()
label.pack()
def update():
label['text']=scrape_cric()
threading.Timer(10, update).start() #####
update()
root.mainloop()
另一个重要注意事项:确保将计时器的目标设置为函数对象,而不是在创建计时器时调用它