PySimpleGUI点击Reload按钮重新随机选择CSV中游戏的实现方法
修改后的可运行代码
import random import csv import PySimpleGUI as sg # 封装随机选游戏的逻辑,方便重复调用 def get_random_game(): with open("Retro Games Spreadsheet! - Games!.csv", encoding="utf-8") as f: reader = csv.reader(f) return random.choice(list(reader)) # 初始化选中的游戏 chosen_row = get_random_game() print(chosen_row) # 创建布局,给需要更新的Text控件加唯一key,方便后续定位修改 layout = [ [sg.Text(chosen_row, key="-GAME_TEXT-")], [sg.Button("Reload")] ] # 创建窗口 window = sg.Window("Select Random Game", layout) # 事件循环 while True: event, values = window.read() if event == sg.WIN_CLOSED: break elif event == "Reload": # 重新调用方法随机选游戏 new_game = get_random_game() # 更新文本控件的内容 window["-GAME_TEXT-"].update(new_game) window.close()
核心修改点
- 把读取CSV、随机选游戏的逻辑封装成独立函数,点击Reload时可以重复调用获取新结果
- 给展示游戏名称的
sg.Text控件添加了唯一标识key="-GAME_TEXT-",PySimpleGUI中所有需要动态修改的控件都需要提前定义key方便定位 - 修正了原代码中layout的语法错误,原代码的括号嵌套格式不符合要求
- 删除了多余的
f.close(),with open语法会在代码块执行结束后自动关闭文件 - 删掉了无效的
window.Refresh(),调用控件的update()方法后界面会自动刷新 - 补充了文件读取的
encoding参数,避免CSV包含中文时出现乱码,可根据自己文件的实际编码调整为gbk等其他值
内容的提问来源于stack exchange,提问作者homebrewzero
相关产品推荐
相关产品推荐

