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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:15:19