gpt4 book ai didi

python - 在 PyQt 中实现首选项对话框窗口

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:20 25 4
gpt4 key购买 nike

我正在尝试使用我在 Qt 设计器中设计的界面作为让用户编辑我的程序首选项的一种方式。

我目前能够通过将以下功能连接到首选项菜单选项来显示我制作的 GUI:

def preferences(self):

preferences_dialog = QtGui.QDialog()
preferences_dialog.ui = Ui_Preferences()
preferences_dialog.ui.setupUi(preferences_dialog)
preferences_dialog.setAttribute(QtCore.Qt.WA_DeleteOnClose)
preferences_dialog.exec_()

我的问题是:什么是实现此目的的好方法,以便我可以使用 GUI 中的字段来更改配置文件中的值?

我还想在更改之前在框中显示预先存在的值。

我应该创建一个使用上述函数作为其 __init__ 方法的新类吗?我想我可能需要一个类来处理窗口的所有进程。另外,我不确定在没有一堆特定代码的情况下在文件和 GUI 之间传递数据的好方法。

enter image description here

最佳答案

使用QSettings .这是 PyQt5 中的示例。

一、主窗口的ui定义

# file ui_main.py
from PyQt5 import QtCore, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(584, 897)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 584, 21))
self.menubar.setObjectName("menubar")
self.menuPreferences = QtWidgets.QMenu(self.menubar)
self.menuPreferences.setObjectName("menuPreferences")
MainWindow.setMenuBar(self.menubar)
self.setPreferencesAction = QtWidgets.QAction(MainWindow)
self.setPreferencesAction.setObjectName("setPreferencesAction")
self.menuPreferences.addAction(self.setPreferencesAction)
self.menubar.addAction(self.menuPreferences.menuAction())

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.menuPreferences.setTitle(_translate("MainWindow", "Settings"))
self.setPreferencesAction.setText(_translate("MainWindow", "Preferences"))

其次,首选项对话框用户界面定义:

# file ui_dialog.py
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(508, 300)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.sl_value = QtWidgets.QSlider(Dialog)
self.sl_value.setGeometry(QtCore.QRect(220, 120, 161, 31))
self.sl_value.setOrientation(QtCore.Qt.Horizontal)
self.sl_value.setObjectName("sl_value")
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)

MainWindow 跟踪 QSettings 对象中的配置,该对象是使用 application 唯一定义(和访问)的>company 字符串被输入到它的构造函数中。

# file main.py
class MainWindow(QMainWindow):

def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)

self.settings = QSettings(COMPANY_NAME, APPLICATION_NAME)

self.ui = Ui_MainWindow()
self.ui.setupUi(self)

当首选项对话框被触发时,设置被加载并传递给PreferencesDialog。如果对话框成功返回,新设置将被保存并使用 del

写入存储
    @pyqtSlot(bool)
def on_setPreferencesAction_triggered(self, triggered):
settings = self.settings
default_config_value = settings.value(CONFIG_KEY_1, defaultValue=None, type=str)

preference_dialog = PreferencesDialog(default_config_value=default_config_value, parent=self)
if preference_dialog.exec():
settings.setValue(CONFIG_KEY_1, preference_dialog.preferences[CONFIG_KEY_1])

# this writes the settings to storage
del settings

PreferencesDialog 构造函数根据它收到的参数设置值,一个 pyqtSlot 附加到适当的 signal 以保存值在字典里。

运行演示:

if __name__ == '__main__':
import sys

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

关于python - 在 PyQt 中实现首选项对话框窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39023584/

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