.. only:: html .. _capi-pyqt5: Работа с графическим пакетом PyQt =========================================== Проект PyQt (``_) с открытым исходным кодом предоставляется под GPL лицензией и является Python-привязкой для кросс-платформенной библиотеки Qt (``_). PyQt позволяет разрабатывать пользовательский интерфейс. Специальная сборка пакета входит в дистрибутив Cerebro. Особенности работы с PyQt ----------------------------------- Приложение Cerebro также написано с использованием библиотеки Qt, поэтому есть несколько особенностей использования пакета PyQt. **QApplication** - в приложении может существовать только один экземпляр класса QApplication, и он уже создается приложением, поэтому вам не нужно его создавать повторно при написании кода с использованием PyQt:: def show_window(): #app = QtGui.QApplication(sys.argv) do not create!!! box = QtGui.QMessageBox() box.setText('Hello, World!') box.exec_() .. automodule:: translate.pyqt_windows **Сигналы и слоты** - встроенный интерпритатор Python не может обрабатывать ошибки в слотах PyQt, используйте конструкцию try except для перехвата ошибок с слотах, иначе есть вероятность некорректного завершения работы приложения:: class MyWindow(QtWidgets.QWidget): def __init__(self): # ... self.my_button = QtWidgets.QPushButton() self.my_button.connect(self.my_button_click) # signal # ... def my_button_click(self): # slot try: # place your code in try catch block except Exception as err: cerebro.core.print_error('PyQt Error: ' + str(err)) .. warning:: Hеприятной особенностью использования PyQt является невозможность перезагрузки Python-модулей без перезагрузки приложения. То есть, вам придется отключить кнопку :ref:`автоматической перезагрузки Python-модулей ` и не пользоваться кнопкой :ref:`полной перезагрузки Python интерпритатора `, иначе есть вероятность некорректного завершения работы приложения. Связанно это с проблемами `переинициализации Python интерпритатора `_, которые мы не можем обойти. Поэтому для подхвата измений в коде вам будет нужно каждый перезапускать приложение.