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

PyQt5 QRadioButton如何保存上次选中项为下次启动的默认状态

实现方案

核心使用Qt内置的QSettings组件实现配置持久化,无需手动操作配置文件,适配全平台。

完整可运行代码

import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import QSettings

class RadioButton(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        # 初始化QSettings,参数为组织名、应用名,用于确定配置存储位置
        self.settings = QSettings("MyApp", "RadioButtonDemo")
        
        self.setWindowTitle("Radio Button")
        self.rbtn1 = QtWidgets.QRadioButton("Button1")
        self.rbtn1.clicked.connect(self.getvalue)

        self.rbtn2 = QtWidgets.QRadioButton("Button2")
        self.rbtn2.clicked.connect(self.getvalue)

        self.rbtn3 = QtWidgets.QRadioButton("Button3")
        self.rbtn3.clicked.connect(self.getvalue)

        self.rbtn4 = QtWidgets.QRadioButton("Button4")
        self.rbtn4.clicked.connect(self.getvalue)

        vbox = QtWidgets.QVBoxLayout()
        vbox.addWidget(self.rbtn1)
        vbox.addWidget(self.rbtn2)
        vbox.addWidget(self.rbtn3)
        vbox.addWidget(self.rbtn4)
        self.setLayout(vbox)
        
        # 启动时加载上次选中的状态,默认第一次运行选中第一个按钮
        self.load_last_checked()

    def load_last_checked(self):
        # 读取配置,默认值为1(对应第一个按钮)
        last_checked = self.settings.value("last_checked_radio", 1, type=int)
        if last_checked == 1:
            self.rbtn1.setChecked(True)
        elif last_checked == 2:
            self.rbtn2.setChecked(True)
        elif last_checked == 3:
            self.rbtn3.setChecked(True)
        elif last_checked == 4:
            self.rbtn4.setChecked(True)

    def getvalue(self):
        if self.rbtn1.isChecked():
            print("Radio button 1 is checked")
            self.settings.setValue("last_checked_radio", 1)
        elif self.rbtn2.isChecked():
            print("Radio button 2 is checked")
            self.settings.setValue("last_checked_radio", 2)
        elif self.rbtn3.isChecked():
            print("Radio button 3 is checked")
            self.settings.setValue("last_checked_radio", 3)
        elif self.rbtn4.isChecked():
            print("Radio button 4 is checked")
            self.settings.setValue("last_checked_radio", 4)
    
    def closeEvent(self, event):
        # 窗口关闭时强制同步配置,确保数据写入成功
        self.settings.sync()
        super().closeEvent(event)

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    win = RadioButton()
    win.show()
    sys.exit(app.exec_())

关键改动说明

  • 引入QSettings组件用于持久化存储选中状态,配置会自动保存在系统对应配置目录,无需手动处理文件IO
  • 新增load_last_checked方法,程序启动时读取上次存储的选中值,对应设置按钮状态
  • 改造getvalue方法,每次选中按钮时同步把当前选中的按钮序号写入配置
  • 重写closeEvent方法,窗口关闭时强制同步配置,避免异常退出导致配置未写入

内容的提问来源于stack exchange,提问作者tckraomuqnt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:15:06