Форум сайта python.su
Приветствую.
Что есть: гуи, в нем различные опции, которые пользователь может менять. Каждый раз при открытии приложения берутся дефолтные значения.
Вопрос в том, как сохранить значения пользователя и использовать их как дефолтные?
Спасибо за помощь.
Офлайн
Hello_worldConfigWriter
Приветствую.Что есть: гуи, в нем различные опции, которые пользователь может менять. Каждый раз при открытии приложения берутся дефолтные значения.Вопрос в том, как сохранить значения пользователя и использовать их как дефолтные?Спасибо за помощь.
Офлайн
Читайте документацию по QSettings()
В методе CloseEvent() вызываете self.writeSettings()
Вот мой пример:
# процедура сохранения настроек: def writeSettings(self): settings = QtCore.QSettings("MyDirConfigName", "my_config_file_name") # координаты окна приложения position = self.pos() # размер окна приложения sizeWin = self.size() settings.setValue("pos", position) settings.setValue("size", sizeWin) # пример сохраненения размеров частей виджета QSplitter settings.setValue("sizeTreeDSplitter", self.split.saveState()) # можно группировать атрибуты для сохранения # "groupName" - это имя группы (придумываете своё любое) settings.beginGroup("groupName") # сохраняете в группу то, что нужно, вызывая settings.setValue settings.setValue("groupItemName_1", "data_for_saving_1") #..... settings.setValue("groupItemName_2", "data_for_saving_2") #..... settings.endGroup() #в конструкторе основного класса приложения, например, в QMainWindow() вызываете self.readSettings() #процедура чтения сохраненных настроек: def readSettings(self): settings = QtCore.QSettings("MyDirConfigName", "my_config_file_name") # координаты окна приложения position = settings.value("pos", QtCore.QPoint(400, 400)) self.move(position) # размер окна приложения sizeWin = settings.value("size", QtCore.QSize(1000, 900)) self.resize(sizeWin) # пример чтения сохраненных размеров частей в QSplitter sizeTreeDSplitter = settings.value("sizeTreeDSplitter", QtCore.QByteArray()) self.split.restoreState(sizeTreeDSplitter) # пример чтения из группы settings.beginGroup("groupName") self.value1 = settings.value("groupItemName_1", "default_data_1")) #.... используете прочитанное значение self.value1 как вам надо self.value2 = settings.value("groupItemName_2", "default_data_2")) #.... settings.endGroup()
Отредактировано FishHook (Янв. 29, 2013 05:03:11)
Офлайн
в первый раз пишу сюда код, все отступы поехали
ну разберётесь наверно
Офлайн
Qt и сам прекрасно справляется.
Для QMainWindow:
def read_settings(self): self.layoutSettings = QSettings(os.path.join(settings_path(), "./layout.ini"), QSettings.IniFormat) self.restoreGeometry(self.layoutSettings.value("mainWindow/geometry")) self.restoreState(self.layoutSettings.value("mainWindow/windowState")) def save_settings(self): self.layoutSettings.setValue("mainWindow/geometry", self.saveGeometry()) self.layoutSettings.setValue("mainWindow/windowState", self.saveState()) self.layoutSettings.sync()
Офлайн
Спасибо за помощь! Но вопросы ещё остались(непонятна мне документация по Qsettings).
KriO, допустим у меня есть checkbox, по дефолту он в состоянии checked, но пользователь изменил это, непонятно как реализовать, чтобы при следующем запуске состояние было non-checked. Про размеры вроде все понятно.
Офлайн
Допустим, есть
self.chB = QtGui.QCheckBox(“Some CheckBox”)
self.chB.setChecked(True)
В методе read_settings() из выше приведенных примеров пишем:
chBoxState = settings.value('chBoxState', QtCore.Qt.Checked)
self.chB.setCheckState(int(chBoxState))
В методе writeSettings() пишем:
settings.setValue('chBoxState', self.chB.checkState())
Офлайн