gpt4 book ai didi

python - 如何在 PyQt5 QRadioButton 中在下次打开时将最后选中的项目存储为默认值?

转载 作者:行者123 更新时间:2023-12-04 07:32:43 25 4
gpt4 key购买 nike

这是我的代码。如何在下次打开程序时将上次单击/选中的按钮存储为默认值?例如:如果我们运行程序并单击第三个按钮并关闭整个程序。每当我重新打开/重新运行程序时,默认情况下会选中最后一次单击的按钮(即默认情况下选中第三个按钮)

import sys

from PyQt5 import QtWidgets

class RadioButton(QtWidgets.QWidget):
def __init__(self):
super(). __init__()

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)

def getvalue(self):
if self.rbtn1.isChecked():
self.rbtn1.setChecked(True)
print("Radio button 1 is checked")
elif self.rbtn2.isChecked():
self.rbtn2.setChecked(True)
print("Radio button 2 is checked")
elif self.rbtn3.isChecked():
self.rbtn3.setChecked(True)
print("Radio button 3 is checked")
elif self.rbtn4.isChecked():
self.rbtn4.setChecked(True)
print("Radio button 4 is checked")

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

最佳答案

您可以使用 QSettings来保存和恢复数据。请注意,值被序列化为 QVariants ,因此您不能,例如,保存自定义 python 子类实例。
为了正确使用 QSettings 你必须设置 Qt 应用程序名称和组织名称(否则数据将不会存储在任何地方)。
可以通过其他方式保存设置,但对于一般用途,最好使用默认行为。
请注意,由于值存储为字符串,Qt 只能尝试猜测实际类型,因此在使用 value() 时最好指定类型。 (见下面的案例)。
然后,虽然默认情况下 Qt 能够自动对单选按钮进行分组并使它们独占(参见 QAbstractButton 的 autoExclusive 属性,对于 QRadioButtons 设置为 True),对于这种情况,最好依赖于 QButtonGroup ,这不仅可以更好地控制按钮,还可以使用分配给它们的唯一 ID 来识别组中的按钮成员。
最后,只需将按钮组的相应信号连接到保存当前选中按钮的函数即可。

from PyQt5 import QtWidgets, QtCore

class RadioButton(QtWidgets.QWidget):
def __init__(self):
super(). __init__()

self.setWindowTitle("Radio Button")
self.rbtn1 = QtWidgets.QRadioButton("Button1")
self.rbtn2 = QtWidgets.QRadioButton("Button2")
self.rbtn3 = QtWidgets.QRadioButton("Button3")
self.rbtn4 = QtWidgets.QRadioButton("Button4")

buttons = self.rbtn1, self.rbtn2, self.rbtn3, self.rbtn4
vbox = QtWidgets.QVBoxLayout(self)
self.optionGroup = QtWidgets.QButtonGroup()
for i, button in enumerate(buttons):
vbox.addWidget(button)
self.optionGroup.addButton(button, i)

# for Qt>=5.15:
# self.optionGroup.idToggled.connect(self.getvalue)
# otherwise:
self.optionGroup.buttonToggled[int, bool].connect(self.getvalue)

self.settings = QtCore.QSettings()
# read the value if it exists, otherwise use a default; note that
# the type MUST be specified, otherwise numbers would be read as
# strings, raising an exception and crashing the program in this case
default = self.settings.value('MyOption', 2, type=int)
self.optionGroup.button(default).setChecked(True)

def getvalue(self, id, checked):
if checked:
button = self.optionGroup.button(id)
print("{} is checked".format(button.text()))
self.settings.setValue('MyOption', id)


if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setOrganizationName('MyOrganization')
app.setApplicationName('MyApplication')
win = RadioButton()
win.show()
sys.exit(app.exec_())
我强烈建议您仔细 学习 关于上面指定的所有类的整个文档。

关于python - 如何在 PyQt5 QRadioButton 中在下次打开时将最后选中的项目存储为默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67873510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com