以PyQt形式设置多个初始值

2024-09-23 22:30:01 发布

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

我一直在尝试为我正在开发的应用程序创建一个设置窗口,我想在设置窗口中填充一个配置文件(我稍后将写入该文件的答案)或系统默认值(如果配置文件不存在或无法打开)。在

我见过一些例子,在执行setupUi(self)之后填充一些值,但是我有大约15-20个值,因此有两个巨大的if语句看起来很混乱。这是我当前的状态,我不知道如何让它调用我创建的函数getConfig

这是填充值的最佳方法吗?或者还有什么我应该试试的吗?在

class SettingsWindow(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self, parent)
        self.ui = Ui_SettingsWindow()
        self.ui.setupUi(self)
        self.ui.getConfig(self) #my problem is here
        ... #all the action bindings

    def getConfig(self):
        if not os.path.exists('app.config'):
            self.ui.setDefaults(self) #fallback to defaults if no config file
        with open('app.config') as f:
            self.config = json.load(f)
            ... #bind all the default values

Tags: theselfconfiguiifinitdef配置文件
1条回答
网友
1楼 · 发布于 2024-09-23 22:30:01

下面是一个使用字典存储小部件的示例-请参阅我的评论。 只有一个EditLine更新了,但是principal在那里(注意,标签也可以用同样的方式更新。在

    from PyQt4 import QtGui, QtCore

class MyWindow(QtGui.QWidget):    # any super class is okay
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)
        self.settings = {}
        var_label = QtGui.QLabel('Path')
        self.settings['path'] = QtGui.QLineEdit(width=200)
        quitbutton = QtGui.QPushButton('Quit')
        loadbutton = QtGui.QPushButton('Load Settings')
        savebutton = QtGui.QPushButton('Save Settings')
        layout1 = QtGui.QHBoxLayout()
        layout1.addWidget(var_label)
        layout1.addWidget(self.settings['path'])
        layout2 = QtGui.QHBoxLayout()
        layout2.addWidget(loadbutton)
        layout2.addWidget(savebutton)
        layout2.addWidget(quitbutton)
        layout = QtGui.QVBoxLayout()
        layout.addLayout(layout1)
        layout.addLayout(layout2)
        self.setLayout(layout)
        loadbutton.clicked.connect(self.get_config)
        savebutton.clicked.connect(self.save_settings)
        quitbutton.clicked.connect(QtGui.qApp.quit)
        self.get_config()


    def get_config(self):
        # Read config file here into dictionary
        # Example
        config_data = {'path':'data path here'} # Example dictionary created when reading config file
        for key in config_data:
            self.settings[key].setText(config_data[key])

    def save_settings(self): # Link to button
        data = {}
        for key in self.settings:
            data[key] = self.settings[key].text()
        # Save to config file here
        print (data)

if __name__ == '__main__':
    app = QtGui.QApplication([])
    window = MyWindow()
    window.show()
    app.exec_()

如果您使用的小部件不是由setText()设置的或不是由text()检索的,那么代码就稍微复杂一些,可以使用各种方法来实现TextEdit、list、Combo等。在

相关问题 更多 >