Сначала мы импортируем виджет панели инструментов из matplotlib.backends.backend_qt5agg.NavigationToolbar2QT, переименовав его в более простое имя NavigationToolbar. Мы создаем экземпляр панели инструментов, вызывая NavigationToolbar с двумя параметрами: сначала объект холста sc, а затем родитель для панели инструментов, в данном случае сам объект MainWindow. Передача холста связывает с ним созданную панель инструментов, позволяя управлять ею. Результирующий объект панели инструментов сохраняется в переменной панели инструментов.
Нам нужно добавить в окно два виджета, один над другим, поэтому мы используем QVBoxLayout. Сначала мы добавляем нашу панель виджетов панели инструментов, а затем виджет холста sc в этот макет. Наконец, мы устанавливаем этот макет в наш простой контейнер макета виджета, который устанавливается в качестве центрального виджета для окна.
Запуск приведенного ниже кода создаст макет окна (снапшоты в конце поста) , показывающий график внизу и элементы управления вверху в виде панели инструментов.
(.env) boris@boris-All-Series:~/QWIDIGET$ cat QtWidgets1.py
import sys
import matplotlib
matplotlib.use('Qt5Agg')
from PyQt5 import QtCore, QtGui, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
class MplCanvas(FigureCanvasQTAgg):
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
super(MplCanvas, self).__init__(fig)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
sc = MplCanvas(self, width=5, height=4, dpi=100)
sc.axes.plot([0,1,2,3,4], [10,1,20,3,40])
# Create toolbar, passing canvas as first parament, parent (self, the MainWindow) as second.
toolbar = NavigationToolbar(sc, self)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(toolbar)
layout.addWidget(sc)
# Create a placeholder widget to hold our toolbar and canvas.
widget = QtWidgets.QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.show()
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
app.exec_()
Кнопки, предоставляемые NavigationToolbar2QT, позволяют выполнять следующие действия:
Home, Back/Forward, Pan & Zoom, которые используются для навигации по графикам. Кнопки «Назад/Вперед» могут перемещаться назад и вперед по шагам навигации, например, увеличение масштаба и последующее нажатие «Назад» вернет к предыдущему масштабу. Дом возвращается в исходное состояние сюжета.
Конфигурация поля/позиции графика, которая может регулировать график в окне.
Редактор стилей осей/кривых, в котором можно изменять названия графиков и масштабы осей, а также устанавливать цвета и стили линий графика. При выборе цвета используется палитра цветов по умолчанию для платформы, что позволяет выбирать любые доступные цвета.
Сохранить, чтобы сохранить полученную фигуру как изображение (все форматы, поддерживаемые Matplotlib).
No comments:
Post a Comment