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
相关产品推荐
相关产品推荐

