Мазмұны
- 1. main .py
Ознакомимся с использование QSettings в PyQt5. Для этого предлагаю написать небольшое приложение, в котором будет один единственный чекбокс, состояние которого мы будем сохранять в настройках. Состояние чекбокса будет сохраняться по клику на данный чекбокс. После закрытия программы и повторного его открытия чекбокс будет выставлен с тем состоянием, в котором он был при закрытии программы.
main .py
- from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QCheckBox, QGridLayout, QLabel, QSpacerItem, \
- QSizePolicy
- from PyQt5.QtCore import QSize, QCoreApplication, QSettings
- ORGANIZATION_NAME = 'Example App'
- ORGANIZATION_DOMAIN = 'example.com'
- APPLICATION_NAME = 'QSettings program'
- SETTINGS_TRAY = 'settings/tray'
- class MainWindow(QMainWindow):
- """
- Объявление чекбокса.
- Инициализироваться будет в конструкторе.
- """
- check_box = None
- # Переопределяем конструктор класса
- def __init__(self):
- # Обязательно нужно вызвать метод супер класса
- QMainWindow.__init__(self)
- self.setMinimumSize(QSize(480, 240)) # Устанавливаем размеры
- self.setWindowTitle("Settings Application") # Устанавливаем заголовок окна
- central_widget = QWidget(self) # Создаём центральный виджет
- self.setCentralWidget(central_widget) # Устанавливаем центральный виджет
- grid_layout = QGridLayout() # Создаём QGridLayout
- central_widget.setLayout(grid_layout) # Устанавливаем данное размещение в центральный виджет
- grid_layout.addWidget(QLabel("Application, which can minimize to Tray", self), 0, 0)
- # Добавляем чекбокс, состояние которого будет сохраняться в настройках
- self.check_box = QCheckBox('Settings CheckBox for minimizing to tray')
- grid_layout.addWidget(self.check_box, 1, 0)
- grid_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Expanding), 2, 0)
- # Обращаемся к настройкам программы
- settings = QSettings()
- # Забираем состояние чекбокса, с указанием типа данных:
- # type=bool является заменой метода toBool() в PyQt5
- check_state = settings.value(SETTINGS_TRAY, False, type=bool)
- # Устанавливаем состояние
- self.check_box.setChecked(check_state)
- # подключаем слот к сигналу клика по чекбоксу, чтобы созранять его состояние в настройках
- self.check_box.clicked.connect(self.save_check_box_settings)
- # Слот для сохранения настроек чекбокса
- def save_check_box_settings(self):
- settings = QSettings()
- settings.setValue(SETTINGS_TRAY, self.check_box.isChecked())
- settings.sync()
- if __name__ == "__main__":
- import sys
- # Для того, чтобы каждый раз при вызове QSettings не вводить данные вашего приложения
- # по которым будут находиться настройки, можно
- # установить их глобально для всего приложения
- QCoreApplication.setApplicationName(ORGANIZATION_NAME)
- QCoreApplication.setOrganizationDomain(ORGANIZATION_DOMAIN)
- QCoreApplication.setApplicationName(APPLICATION_NAME)
- app = QApplication(sys.argv)
- mw = MainWindow()
- mw.show()
- sys.exit(app.exec())
а как можно это сделать без чек бокса
Вы можете в QSettings записать откуда угодно bool переменную без всяких чекбоксов.
Обратите внимание на some_variable . Это переменная в которой может быть какая угодно переменная.