Evgenii Legotckoi
Jan. 15, 2017, 5:49 p.m.

PyQt5 - Lesson 004. Using QSettings

Content

See Using QSettings in PyQt5. I propose to write a small application, which will be a single check box, the state of which we will save in the settings. Status checkbox will be saved by clicking on the checkbox. After closing the program and re-open this checkbox will be put to the state in which it was at the close of the program.


main .py

  1. from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QCheckBox, QGridLayout, QLabel, QSpacerItem, \
  2. QSizePolicy
  3. from PyQt5.QtCore import QSize, QCoreApplication, QSettings
  4.  
  5.  
  6. ORGANIZATION_NAME = 'Example App'
  7. ORGANIZATION_DOMAIN = 'example.com'
  8. APPLICATION_NAME = 'QSettings program'
  9. SETTINGS_TRAY = 'settings/tray'
  10.  
  11.  
  12. class MainWindow(QMainWindow):
  13. """
  14. Checkbox.
  15.          Will initialize in the constructor.
  16. """
  17. check_box = None
  18.  
  19. # Override the class constructor
  20. def __init__(self):
  21. # Be sure to call the super class method
  22. QMainWindow.__init__(self)
  23.  
  24. self.setMinimumSize(QSize(480, 240)) # Set sizes
  25. self.setWindowTitle("Settings Application") # Set a title
  26. central_widget = QWidget(self) # Create a central widget
  27. self.setCentralWidget(central_widget) # Set the central widget
  28.  
  29. grid_layout = QGridLayout() # Create a QGridLayout
  30. central_widget.setLayout(grid_layout) # Set the layout into the central widget
  31. grid_layout.addWidget(QLabel("Application, which can minimize to Tray", self), 0, 0)
  32.  
  33. # Add a checkbox, which will depend on the behavior of the program when the window is closed
  34. self.check_box = QCheckBox('Settings CheckBox for minimizing to tray')
  35. grid_layout.addWidget(self.check_box, 1, 0)
  36. grid_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Expanding), 2, 0)
  37.  
  38. # Get settings
  39. settings = QSettings()
  40. # Get checkbox state with speciying type of checkbox:
  41. # type=bool is a replacement of toBool() in PyQt5
  42. check_state = settings.value(SETTINGS_TRAY, False, type=bool)
  43. # Set state
  44. self.check_box.setChecked(check_state)
  45. # connect the slot to the signal by clicking the checkbox to save the state settings
  46. self.check_box.clicked.connect(self.save_check_box_settings)
  47.  
  48. # Slot checkbox to save the settings
  49. def save_check_box_settings(self):
  50. settings = QSettings()
  51. settings.setValue(SETTINGS_TRAY, self.check_box.isChecked())
  52. settings.sync()
  53.  
  54.  
  55. if __name__ == "__main__":
  56. import sys
  57.  
  58. # To ensure that every time you call QSettings not enter the data of your application,
  59.   # which will be the settings, you can set them globally for all applications
  60. QCoreApplication.setApplicationName(ORGANIZATION_NAME)
  61. QCoreApplication.setOrganizationDomain(ORGANIZATION_DOMAIN)
  62. QCoreApplication.setApplicationName(APPLICATION_NAME)
  63.  
  64. app = QApplication(sys.argv)
  65. mw = MainWindow()
  66. mw.show()
  67. sys.exit(app.exec())

Do you like it? Share on social networks!

а как можно это сделать без чек бокса

Вы можете в QSettings записать откуда угодно bool переменную без всяких чекбоксов.

  1. def save_check_box_settings(self):
  2. settings = QSettings()
  3. settings.setValue(SETTINGS_TRAY, some_variable)
  4. settings.sync()

Обратите внимание на some_variable . Это переменная в которой может быть какая угодно переменная.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • AK
    April 1, 2025, 11:41 a.m.
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    March 9, 2025, 9:02 p.m.
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    March 9, 2025, 4:14 p.m.
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
  • Evgenii Legotckoi
    Oct. 31, 2024, 11:37 p.m.
    Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup