Шаг 282.
Библиотека PyQt5.
Создание SDI- и MDI-приложений. Управление строкой состояния

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

    Класс QStatusBar реализует строку состояния, в которой можно выводить различные сообщения. Помимо текстовой информации, туда можно добавить различные компоненты,- например, индикатор хода выполнения процесса. Строка состояния состоит из трех секций:

    Получить ссылку на строку состояния, установленную в главном окне, позволяет метод statusBar() класса QMainWindow, а установить пользовательскую панель вместо стандартной можно с помощью метода setstatusBar(<QStatusBar>). Иерархия наследования для класса QStatusBar выглядит так:

  (QObject, QPaintDevice) - QWidget - QStatusBar

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

 <Объект> = QStatusBar([parent=None])

    В параметре parent указывается ссылка на родительское окно.

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

    Класс QStatusBar поддерживает сигнал messageChanged(<Сообщение>), генерируемый при изменении текста во временной секции. Внутри обработчика через параметр доступно новое сообщение или пустая строка.

    В заключение дополним пример из 280 шага созданием и отображением строки состояния. Она сожержит постоянную секцию, в которую выводится строка "Hello!". В секцию временных сообщений выводятся координаты курсора мыши, когда мышь перемещается на форме (не забудьте нажать клавишу мыши!).

# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QLabel
from PyQt5.QtGui import QIcon


class Example(QMainWindow):

    def __init__(self):
        super().__init__()
        self.X = 0
        self.Y = 0

        self.initUI()

    def mouseMoveEvent(self, e):
        # Получение текущих координат мыши
        # Не забудьте нажать кнопку мыши!
        s = 'X = ' + str(e.x()) + ', Y = ' + str(e.y())
        # Вывод их в секцию временных сообщений
        self.statusBar().showMessage(s)
        

    def initUI(self):

        exitAction = QAction(QIcon('exit.png'), '&Exit', self)
        exitAction.setShortcut('Ctrl+Q')
        exitAction.triggered.connect(qApp.quit)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        # ======= Добавили панель инструментов
        toolbar = self.addToolBar('Exit')
        toolbar.addAction(exitAction)
        # ======= Завершение добавления

        # ======= Добавили строку состояния
        stBar = self.statusBar()
        lb = QLabel('Hello!')
        # Выводит виджет в постоянную секцию
        stBar.insertPermanentWidget(0, lb)
        # ======= Завершение добавления

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('Menubar, Toolbar & Statusbar')
        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
Архив с файлом можно взять здесь.

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


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

    Со следующего шага мы начнем рассматривать MDI-приложения.




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