Evgenii Legotckoi
Қаң. 15, 2017, 5:49 Т.Қ.

PyQt5 - Оқулық 004. QSettings пайдалану

Мазмұны

Ознакомимся с использование QSettings в PyQt5. Для этого предлагаю написать небольшое приложение, в котором будет один единственный чекбокс, состояние которого мы будем сохранять в настройках. Состояние чекбокса будет сохраняться по клику на данный чекбокс. После закрытия программы и повторного его открытия чекбокс будет выставлен с тем состоянием, в котором он был при закрытии программы.


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. Объявление чекбокса.
  15. Инициализироваться будет в конструкторе.
  16. """
  17. check_box = None
  18.  
  19. # Переопределяем конструктор класса
  20. def __init__(self):
  21. # Обязательно нужно вызвать метод супер класса
  22. QMainWindow.__init__(self)
  23.  
  24. self.setMinimumSize(QSize(480, 240)) # Устанавливаем размеры
  25. self.setWindowTitle("Settings Application") # Устанавливаем заголовок окна
  26. central_widget = QWidget(self) # Создаём центральный виджет
  27. self.setCentralWidget(central_widget) # Устанавливаем центральный виджет
  28.  
  29. grid_layout = QGridLayout() # Создаём QGridLayout
  30. central_widget.setLayout(grid_layout) # Устанавливаем данное размещение в центральный виджет
  31. grid_layout.addWidget(QLabel("Application, which can minimize to Tray", self), 0, 0)
  32.  
  33. # Добавляем чекбокс, состояние которого будет сохраняться в настройках
  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. # Обращаемся к настройкам программы
  39. settings = QSettings()
  40. # Забираем состояние чекбокса, с указанием типа данных:
  41. # type=bool является заменой метода toBool() в PyQt5
  42. check_state = settings.value(SETTINGS_TRAY, False, type=bool)
  43. # Устанавливаем состояние
  44. self.check_box.setChecked(check_state)
  45. # подключаем слот к сигналу клика по чекбоксу, чтобы созранять его состояние в настройках
  46. self.check_box.clicked.connect(self.save_check_box_settings)
  47.  
  48. # Слот для сохранения настроек чекбокса
  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. # Для того, чтобы каждый раз при вызове QSettings не вводить данные вашего приложения
  59. # по которым будут находиться настройки, можно
  60. # установить их глобально для всего приложения
  61. QCoreApplication.setApplicationName(ORGANIZATION_NAME)
  62. QCoreApplication.setOrganizationDomain(ORGANIZATION_DOMAIN)
  63. QCoreApplication.setApplicationName(APPLICATION_NAME)
  64.  
  65. app = QApplication(sys.argv)
  66. mw = MainWindow()
  67. mw.show()
  68. sys.exit(app.exec())

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

ЖН
  • Жел. 8, 2018, 7:02 Т.Қ.

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

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

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

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

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз