12.1.4. Пример работы с PyQt

В этом примере показана схема работы с пакетом PyQt, который позволит вам расширять графический интерфейс приложения.

Чтобы включить пример, и посмотреть как он работает нужно выполнить следующие действия.

Переименовать файл menu.py.template в menu.py (см. раздел Шаблоны расширяемых Python-модулей)

В файле menu.py раскомментировать вызов функции примера:

import cerebro
import examples

def init_menu():
    examples.pyqt.create_menu()

Модуль примера работы с пакетом PyQt расположен в examples/pyqt.py (см. раздел Организация файлов)

examples/pyqt.py

# -*- coding: utf-8 -*-
"""
Пример демонстритует использование пакета PyQt5 (http://www.riverbankcomputing.com/software/pyqt/).
Пакет входит в дистрибутив Cerebro и расположен в папке py-site-packages.

Функции:

create_menu() - добавление пуктов меню для вызова Qt окон.
show_dialog() - вызывается при активации добавленного пункта меню 'Qt Диалог'
show_window() - вызывается при активации добавленного пункта меню в 'Qt Окно'
"""

import cerebro

def create_menu():
        # Добавление пунктов меню для вызова Qt окон.

        # Добавляем пункты в Главное меню
        main_menu = cerebro.actions.MainMenu() # получаем Главное меню
        my_menu = main_menu.insert_menu(main_menu.size() - 2, 'Python Qt') # вставляем подменю в предпоследнюю позицию

        my_menu.add_action('examples.pyside.show_dialog',  'Qt Диалог') # добавляем пукт меню
        my_menu.add_action('examples.pyside.show_window',  'Qt Окно') # добавляем пукт меню



def show_dialog():
        # Активация пункта главного меню 'Qt Диалог'.
        # Показывает диалог. Основной интерфейс при этом блокируется.
        from PyQt5 import QtWidgets,  QtCore

        class MyDialog(QtWidgets.QDialog): # класс диалога

                def __init__(self, parent=None):
                        super(MyDialog, self).__init__(parent)

                        label = QtWidgets.QLabel('Qt Диалог')
                        label.setAlignment(QtCore.Qt.AlignCenter)

                        mainLayout = QtWidgets.QGridLayout()
                        mainLayout.addWidget(label, 0, 0)

                        self.setLayout(mainLayout)


        dialog = MyDialog()
        dialog.setFixedSize(300,  200)
        dialog.exec_() # пока не диалог не закроется интерфейс приложения будет заблокирован



window = None

def show_window():
        # Активация пункта главного меню 'Qt Окно'.
        # Показывает окно без блокировки основного интерфейса.
        from PyQt5 import QtWidgets,  QtCore

        global window

        if window == None: # если обьект окна еще не создан, создаем его
                window = QtWidgets.QLabel()
                window.setAlignment(QtCore.Qt.AlignCenter)
                window.setFixedSize(300,  200)
                window.setWindowTitle('Qt Окно')
                window.setText('Показываем окно первый раз')
        else:
                window.setText('Показываем окно повторно')

        window.show()