PySimpleGUI如何实现互斥按钮点击后保持按下状态
互斥保持按下按钮实现方案
这个效果完全可以实现,基于PySimpleGUI原生的按钮样式更新能力即可完成,不需要替换成其他控件。
实现逻辑
- 给3个道路选项按钮配置独立的
key标识,提前定义好常态、选中态两套按钮颜色样式。 - 监听按钮组的点击事件:触发点击时,先把组内所有按钮重置为常态样式,再单独将当前被点击的按钮切换为选中态样式,模拟持续按下的视觉效果。
- 增加全局变量记录当前激活的选项,方便后续业务逻辑读取当前选择值。
可直接复用的代码示例
import PySimpleGUI as psg mainFont = ("默认字体", 12) # 按钮样式配置:格式为(文字颜色, 背景颜色) BTN_COLOR_NORMAL = ("black", "Gray") BTN_COLOR_SELECTED = ("white", "#2563EB") # 深蓝色按压效果,可自行调整色值 settingsButtonsLine = [ [ psg.Button("CITY ROAD", size=(20, 7), button_color=BTN_COLOR_NORMAL, font=mainFont, key="-ROAD_CITY-"), psg.Button("NORMAL ROAD", size=(20, 7), button_color=BTN_COLOR_NORMAL, font=mainFont, key="-ROAD_NORMAL-"), psg.Button("HIGHWAY", size=(20, 7), button_color=BTN_COLOR_NORMAL, font=mainFont, key="-ROAD_HIGHWAY-") ] ] # 完整布局可自行拼接其他模块 layout = [ *settingsButtonsLine, [psg.Push(), psg.Button("确认")] ] window = psg.Window("道路设置", layout, finalize=True) # 按钮组key集合,用于批量重置样式 road_btn_group = ["-ROAD_CITY-", "-ROAD_NORMAL-", "-ROAD_HIGHWAY-"] current_active_option = None while True: event, values = window.read() if event == psg.WIN_CLOSED: break # 检测到点击道路选项按钮 if event in road_btn_group: # 所有按钮恢复常态 for btn_key in road_btn_group: window[btn_key].update(button_color=BTN_COLOR_NORMAL) # 当前点击按钮切换为选中按压态 window[event].update(button_color=BTN_COLOR_SELECTED) current_active_option = event # 下方可编写选项切换后的业务逻辑 window.close()
你可以根据自己的界面设计调整选中态的颜色、文字样式,不需要使用单选框控件就能达到“点击后保持按下,切换其他选项才恢复常态”的交互效果。
内容的提问来源于stack exchange,提问作者Paul C
相关产品推荐
相关产品推荐

