在PyQt表单中设置多个初始值

时间:2016-05-11 00:30:08

标签: python pyqt

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

我已经看到在执行setupUi(self)之后填充了一些值的示例,但是我有大约15到20个值,因此有2个巨大的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

1 个答案:

答案 0 :(得分:1)

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

    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,Lists,Combo等的各种方法。