Меню и тулбары в PyQt5
В этой части учебника PyQt5, мы создадим меню и тулбар (панель инструментов). Меню представляет собой группу команд, расположенных в менюбаре. Панель инструментов содержит кнопки с некоторыми общими командами в приложении.
Главное окно
Класс QMainWindow предоставляет главное окно приложения. Это позволяет создать классический каркас приложений с статусбаром, тулбаром и меню.
Статусбар (строка состояния)
Строка состояния является виджетом, который используется для отображения информации о состоянии.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QApplication class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.statusBar().showMessage('Ready') self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Statusbar') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Статусбар создаётся с помощью функции QMainWindow.
self.statusBar().showMessage('Ready')
Чтобы получить строку состояния, мы вызываем метод statusBar() класса QtWidgets.QMainWindow. Первый вызов метода создает строку состояния. Последующие вызовы возвращают объект статусбара. showMessage() отображает сообщение в строке состояния.
Строка меню
Строка меню - общая часть приложения с графическим интерфейсом. Это группа команд, расположенных в различных меню.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): exitAction = QAction(QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(qApp.quit) self.statusBar() menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Menubar') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
В приведенном выше примере, мы создаем строку меню с одним меню. Это меню будет содержать одно действие, которое будет прекращать программу. Строка состояния также создается. Действие доступно с помощью Ctrl + Q.
exitAction = QAction(QIcon('exit.png'), '&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application')
QAction является абстракцией для действий, совершенных из меню, панели инструментов, или комбинаций клавиш. В этих трех строках, мы создаем действие с соответствующей иконкой. Кроме того, для этого действия определяется комбинация клавиш. Третья строка создает подсказку, которая показывается в строке состояния, когда вы наведёте указатель мыши на пункт меню.
exitAction.triggered.connect(qApp.quit)
Когда мы выбираем именно это действие, срабатывает сигнал. Сигнал подключен к методу quit() виджета QApplication. Это завершает приложение.
menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction)
Метод menuBar() создает строку меню. Мы создаем меню файла и добавляем к нему действие выхода.
Панель инструментов (тулбар)
Меню группируют все команды, которые мы можем использовать в приложении.
Панели инструментов обеспечивают быстрый доступ к наиболее часто используемым командам.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): exitAction = QAction(QIcon('exit24.png'), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.triggered.connect(qApp.quit) self.toolbar = self.addToolBar('Exit') self.toolbar.addAction(exitAction) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('Toolbar') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Здесь практически всё аналогично статусбару.
Объединяя все вместе
В последнем примере этого раздела мы создадим строку меню, панель инструментов и статусную строку. Мы также создадим центральный виджет.
#!/usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QMainWindow, QTextEdit, QAction, QApplication from PyQt5.QtGui import QIcon class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): textEdit = QTextEdit() self.setCentralWidget(textEdit) exitAction = QAction(QIcon('exit24.png'), 'Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(self.close) self.statusBar() menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(exitAction) toolbar = self.addToolBar('Exit') toolbar.addAction(exitAction) self.setGeometry(300, 300, 350, 250) self.setWindowTitle('Main window') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
Данный пример кода создает скелет классического приложения с графическим интерфейсом с меню, тулбаром и статусбаром.
textEdit = QTextEdit() self.setCentralWidget(textEdit)
Здесь мы создаем виджет редактирования текста. Мы его назначаем центральным виджетом QMainWindow. Центральный виджет занимает все пространство, которое осталось.
В этой части урока PyQt5, мы работали с меню, панелью инструментов, строкой состояния и главным окном приложения.