Шаг 281.
Библиотека PyQt5.
Создание SDI- и MDI-приложений. Прикрепляемые панели

    На этом шаге мы рассмотрим назначение, иерархию наследования, форматы конструктора и основные методы этого класса.

    Если возможностей панелей инструментов недостаточно, и необходимо вывести на экран компоненты, занимающие много места (например, таблицу или иерархический список), можно воспользоваться прикрепляемыми панелями. Прикрепляемые панели реализуются с помощью класса QDockWidget.

    Его иерархия наследования выглядит так:

  (QObject,   QPaintDevice)  - QWidget - QDockWidget

    Форматы конструктора класса QDockWidget:

  <Объект> = QDockWidget([parent=None][, flags=0])
  <Объект> = QDockWidget(<Название>[, parent=None][, flags=0])

    В параметре <Название> задается название панели, которое отображается в заголовке панели и в контекстном меню при щелчке правой кнопкой мыши в области меню, области панелей инструментов или на заголовке прикрепляемых панелей. С помощью контекстного меню можно скрыть или отобразить прикрепляемую панель. В параметре parent указывается ссылка на родительское окно. Доступные значения параметра flags мы рассматривали на 25 шаге.

    Класс QDockWidget наследует все методы из базовых классов и поддерживает следующие дополнительные методы (здесь приведены только интересующие нас - полный их список доступен на странице https://doc.qt.io/qt-5/qdockwidget.html):

    Класс QDockWidget поддерживает следующие полезные сигналы (полный их список доступен на странице https://doc.qt.io/qt-5/qdockwidget.html):

    В заключение приведем небольшой пример использования объектов этого класса (пример взят здесь: https://pythonpyqt.com/qdockwidget/).

    QDockWidget - это оконный элемент управления, который можно закрепить в QMainWindow. Его можно сохранить в плавающем состоянии или прикрепить к главному окну в качестве дочернего окна в указанном месте.

    Программа ниже создает объект QDockable со списком внутри него. Вы можете перетащить его и положить слева, справа и т. д.

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class DockDemo(QMainWindow):
    def __init__(self, parent=None):
        super(DockDemo, self).__init__(parent)
        layout = QHBoxLayout()
        bar = self.menuBar()
        file = bar.addMenu('File')
        file.addAction('New')
        file.addAction('Save')
        file.addAction('quit')

        self.items = QDockWidget('Dockable', self)

        self.listWidget=QListWidget()
        self.listWidget.addItem('Item1')
        self.listWidget.addItem('Item2')
        self.listWidget.addItem('Item3')
        self.listWidget.addItem('Item4')

        self.items.setWidget(self.listWidget)
        self.items.setFloating(False)
        self.setCentralWidget(QTextEdit())
        self.addDockWidget(Qt.RightDockWidgetArea, self.items)

        self.setLayout(layout)
        self.setWindowTitle('Dock')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = DockDemo()
    demo.show()
    sys.exit(app.exec_())
Архив с файлом можно взять здесь.

    Результат работы приложения показан на рисунке 1.


Рис.1. Результат работы приложения

    В этом примере верхнее окно - это объект QMainWindow, а объект QTextEdit - его центральный виджет.

        self.setCentralWidget(QTextEdit())

    Сначала создаем закрепляемый элемент окна.

        self.items = QDockWidget('Dockable', self)

    Затем добавим объект QListWidget в закрепленное окно.

        self.listWidget=QListWidget()
        self.listWidget.addItem('Item1')
        self.listWidget.addItem('Item2')
        self.listWidget.addItem('Item3')
        self.listWidget.addItem('Item4')

        self.items.setWidget(self.listWidget)

    На следующем шаге мы рассмотрим управление строкой состояния.




Предыдущий шаг Содержание Следующий шаг