在python

时间:2018-01-28 11:49:01

标签: python-3.x tkinter web-scraping

我正在尝试创建一个自动更新板球比赛得分的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小部件后,它会再次显示更新的分数。我不想关闭它。它应该更新,而不是关闭它。

1 个答案:

答案 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()

另一个重要注意事项:确保将计时器的目标设置为函数对象,而不是在创建计时器时调用它