在PyQ中实现preferences对话框窗口

2024-05-15 19:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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中的字段来更改配置文件中的值?在

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

我是否应该创建一个新的类来使用上面的函数作为它的\uu init\uu方法?我想我可能需要一个类来处理窗口的所有进程。另外,我不确定是否有一个好的方法在文件和GUI之间传递数据,而不需要一堆特定的代码。在

enter image description here


Tags: 方法用户程序功能编辑uidef选项
1条回答
网友
1楼 · 发布于 2024-05-15 19:29:09

使用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"))

第二,首选项对话框ui定义:

^{pr2}$

MainWindow跟踪QSettings对象中的配置,该对象使用传入其构造函数的applicationcompany字符串进行唯一定义(和访问)。在

# 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)

当触发“首选项”对话框时,settings将被加载并传递给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_())

相关问题 更多 >