PySimpleGUI中Total金额实时更新至UI窗口求助
解决PySimpleGUI点餐界面更新总价显示的问题
你的问题核心是静态Text元素不会自动更新——初始化时它只渲染了初始的total值,后续total变化后需要主动触发UI元素的更新。下面是修改后的完整代码,以及关键改动说明:
import PySimpleGUI as sg menu_dictionary = { "Burger": 3.5, "Onions": 0.75, "Bacon": 1.25, "Eggs": 1.00, "Gatorade": 1.25 } total = 0 sg.theme('DarkAmber') layout = [ [sg.Text("Welcome to the MAF Menu")], [sg.Text("Entrees"), sg.Button("Burger"), sg.Button("Sandwhich"), sg.Button("Hot Dog"), sg.Button("Eggs")], [sg.Text("Sides"), sg.Button("Onions"), sg.Button("Pickles"), sg.Button("Cheese")], # 给总价Text添加唯一key,方便后续定位更新 [sg.Text(f"Total ${total:.2f}", key='-TOTAL-')], [sg.Button("Exit")], ] window = sg.Window('MAF Menu', layout) while True: event, values = window.read() if event == sg.WIN_CLOSED or event == 'Exit': break # 用break退出循环,确保后续能正常关闭窗口 # 统一判断按钮是否在菜单字典中,减少冗余代码 if event in menu_dictionary: total += menu_dictionary[event] # 主动更新UI上的总价显示,保留两位小数更符合金额格式 window['-TOTAL-'].update(f"Total ${total:.2f}") print(total) window.close()
关键改动说明:
- 给Text元素加key:在显示总价的
sg.Text里添加key='-TOTAL-',这是PySimpleGUI中定位元素的标准方式,相当于给元素加了唯一标识。 - 调用update方法刷新UI:每次total更新后,通过
window['-TOTAL-'].update(新内容)强制刷新该元素的显示,用f-string格式化金额为两位小数,更贴合点餐场景的需求。 - 优化事件判断逻辑:用
if event in menu_dictionary:代替逐个判断按钮,后续新增菜单选项时只需修改字典,不用改动事件判断代码。 - 替换exit()为break:
exit()会直接终止程序,用break退出循环后能正常执行window.close(),更符合资源释放的规范。
另外,你代码里的Sandwhich、Hot Dog、Pickles、Cheese这些按钮目前没有对应的菜单价格,后续补充到menu_dictionary里就能自动支持总价计算和UI更新了。
内容的提问来源于stack exchange,提问作者Andrew Goldtrap
相关产品推荐
相关产品推荐

