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

如何解决Tkinter Next按钮点击无法调用API获取新结果刷新事实显示的问题

问题原因
  • 你定义的get_fact函数内部的Fact是局部变量,仅在函数内部生效,不会修改你在全局定义的Fact变量,函数执行完后新获取的冷知识没有被保存下来。
  • 就算你成功修改了全局Fact变量的值,你也没有调用Text组件的更新方法,界面上展示的内容不会自动同步变量的变化。
修复方案

你只需要修改get_fact函数的逻辑,在获取到新的冷知识后直接操作Text组件刷新内容即可,不需要依赖全局变量传递值:

def get_fact():
    response = requests.get(api_url).text
    response_info = json.loads(response)
    new_fact = response_info["text"]
    # 清空Text组件原有内容
    T.delete(1.0, tk.END)
    # 插入新获取的冷知识
    T.insert(tk.END, new_fact)

完整可运行的修复后代码如下:

import tkinter as tk
from tkinter import *
import requests
import json

root = Tk()
root.geometry("400x300")
root.title("API random useless fact")

T = Text(root, height = 10, width = 40)

l = Label(root, text = "Fact")
l.config(font = ("Courier", 14))

api_url = "https://uselessfacts.jsph.pl//random.json?language=en"
response = requests.get(api_url).text
response_info = json.loads(response)
Fact = response_info["text"]

def get_fact():
    response = requests.get(api_url).text
    response_info = json.loads(response)
    new_fact = response_info["text"]
    T.delete(1.0, tk.END)
    T.insert(tk.END, new_fact)

b1 = Button(root, text = "Next", command = get_fact)
b2 = Button(root, text = "Exit", command = root.destroy)

l.pack()
T.pack()
b1.pack()
b2.pack()

T.insert(tk.END, Fact)

tk.mainloop()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:39:00