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()