- 1. main .py
Werfen wir einen Blick auf die Verwendung von QSettings in PyQt5. Dazu schlage ich vor, eine kleine Anwendung zu schreiben, in der es ein einziges Kontrollkästchen gibt, dessen Zustand wir in den Einstellungen speichern. Durch Anklicken dieses Kontrollkästchens wird der Zustand des Kontrollkästchens gespeichert. Nach dem Schließen und erneuten Öffnen des Programms wird das Kontrollkästchen wieder in den Zustand versetzt, in dem es sich beim Schließen des Programms befand.
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 . Это переменная в которой может быть какая угодно переменная.