.. 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 интерпритатора `_,
которые мы не можем обойти. Поэтому для подхвата измений в коде
вам будет нужно каждый перезапускать приложение.