如何解决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
相关产品推荐
相关产品推荐

