You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现板球比赛分数自动更新Tk组件故障求助

解决Tkinter板球分数自动更新问题

你的代码里有几个关键问题导致无法实现窗口内自动更新,反而每次弹出新窗口,我来帮你修正并解释原因:

问题分析

  • 重复创建窗口:每次调用display_Score()都会新建一个Tk()实例,所以必须关闭旧窗口才会出现新窗口。
  • 阻塞的事件循环:mainloop()是Tk的核心事件循环,会阻塞后续代码执行,你写在它后面的threading.Timer直到窗口关闭才会运行。
  • 错误的定时调用:threading.Timer(10, display_Score()).start()里直接执行了display_Score(),而不是传递函数引用;而且用线程操作Tk组件容易引发线程安全问题(Tk组件必须在主线程中修改)。
  • 无组件引用:没有保留Label的引用,无法更新已有Label的文本,只能通过新建窗口展示新分数。

修正后的代码

import requests
from bs4 import BeautifulSoup
from tkinter import *
from tkinter import ttk

def scrape_cric():
    # 可替换为任意正在进行的比赛链接
    page = 'http://www.cricbuzz.com/live-cricket-scores/18733/engu19-vs-bdeshu19-5th-place-playoff-semi-final-2-icc-under-19-world-cup-2018'
    try:
        r = requests.get(page)
        r.raise_for_status()  # 捕获网络请求错误
        soup = BeautifulSoup(r.text, 'lxml')
        score = soup.find('span', {'class':'cb-font-20 text-bold'})
        return score.text if score else "无法获取分数"
    except Exception as e:
        return f"获取失败: {str(e)}"

def update_score():
    # 抓取最新分数并更新Label文本
    latest_score = scrape_cric()
    score_label.config(text=latest_score)
    # 10秒后再次调用自身,实现循环更新
    root.after(10000, update_score)

def setup_ui():
    global root, score_label
    root = Tk()
    root.title("实时板球比分")
    
    top_frame = Frame(root, padx=20, pady=20)
    top_frame.pack()
    
    score_label = Label(top_frame, text="正在加载分数...", font=('Arial', 16))
    score_label.pack()
    
    # 先初始化更新一次,再启动定时循环
    update_score()
    root.mainloop()

if __name__ == "__main__":
    setup_ui()

关键修改说明

  • 单一窗口实例:只创建一个Tk()根窗口,所有更新都在这个窗口内完成。
  • 使用after()方法:这是Tkinter官方推荐的定时任务方式,在主线程中触发更新,避免线程安全问题。
  • 保留组件引用:将score_label设为全局变量(如果追求更优雅的写法可以用类封装),方便在更新函数中修改其文本。
  • 异常处理:给网络请求添加异常捕获,避免因网络波动或页面结构变化导致程序崩溃。
  • 初始化加载:启动UI后立即执行一次分数更新,避免窗口显示空白内容。

这样修改后,程序会在同一个窗口中每隔10秒自动刷新板球分数,无需关闭窗口~

内容的提问来源于stack exchange,提问作者Pytholic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:43:11