Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2013 19:13:11

Hello_world
Зарегистрирован: 2012-10-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение состояния гуи(qt)

Приветствую.

Что есть: гуи, в нем различные опции, которые пользователь может менять. Каждый раз при открытии приложения берутся дефолтные значения.
Вопрос в том, как сохранить значения пользователя и использовать их как дефолтные?

Спасибо за помощь.

Офлайн

#2 Янв. 21, 2013 19:24:09

mironich
От:
Зарегистрирован: 2011-05-23
Сообщения: 118
Репутация: +  2  -
Профиль   Отправить e-mail  

Сохранение состояния гуи(qt)

Hello_world
Приветствую.Что есть: гуи, в нем различные опции, которые пользователь может менять. Каждый раз при открытии приложения берутся дефолтные значения.Вопрос в том, как сохранить значения пользователя и использовать их как дефолтные?Спасибо за помощь.
ConfigWriter
Я делал так:
Создал класс который обходит все эл-ты GUI и если у обькта свойство objectName не пустое, записывал это значение в файл, имя опции objectName текущего обьекта.
Метод save который все вышеописанное делал, вызывал в переопределенном методе closeEvent.
А загружал в конструкторе нужного виджета.



Офлайн

#3 Янв. 28, 2013 23:46:58

KriO
Зарегистрирован: 2012-10-07
Сообщения: 61
Репутация: +  9  -
Профиль   Отправить e-mail  

Сохранение состояния гуи(qt)

Читайте документацию по 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)

Офлайн

#4 Янв. 28, 2013 23:48:43

KriO
Зарегистрирован: 2012-10-07
Сообщения: 61
Репутация: +  9  -
Профиль   Отправить e-mail  

Сохранение состояния гуи(qt)

в первый раз пишу сюда код, все отступы поехали
ну разберётесь наверно

Офлайн

#5 Янв. 29, 2013 20:20:43

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Сохранение состояния гуи(qt)

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()
http://doc.qt.digia.com/qt/qwidget.html#saveGeometry
http://doc.qt.digia.com/qt/qwidget.html#restoreGeometry
http://doc.qt.digia.com/qt/qmainwindow.html#saveState
http://doc.qt.digia.com/qt/qmainwindow.html#restoreState

Офлайн

#6 Фев. 17, 2013 12:07:13

Hello_world
Зарегистрирован: 2012-10-04
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

Сохранение состояния гуи(qt)

Спасибо за помощь! Но вопросы ещё остались(непонятна мне документация по Qsettings).
KriO, допустим у меня есть checkbox, по дефолту он в состоянии checked, но пользователь изменил это, непонятно как реализовать, чтобы при следующем запуске состояние было non-checked. Про размеры вроде все понятно.

Офлайн

#7 Фев. 21, 2013 22:23:56

KriO
Зарегистрирован: 2012-10-07
Сообщения: 61
Репутация: +  9  -
Профиль   Отправить e-mail  

Сохранение состояния гуи(qt)

Допустим, есть
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())


Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version