Введение
В этом лабораторном занятии мы научимся использовать библиотеку Matplotlib для создания и модификации окон фигур. Мы также изучим, как настроить GUI, доступя к базовым виджетам GTK.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт библиотек
Во - первых, нам нужно импортировать необходимые библиотеки. Мы будем использовать Matplotlib, GTK3 и модуль Gtk из gi.repository.
import matplotlib
matplotlib.use('GTK3Agg') ## или 'GTK3Cairo'
import gi
import matplotlib.pyplot as plt
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
Создание фигуры и осей
Далее мы создадим фигуру и оси с помощью метода subplots(). Затем мы построим две линии на оси и добавим легенду, чтобы различить их.
fig, ax = plt.subplots()
ax.plot([1, 2, 3], 'ro-', label='easy as 1 2 3')
ax.plot([1, 4, 9], 'gs--', label='easy as 1 2 3 squared')
ax.legend()
Доступ к панели инструментов и VBox
Мы получим доступ к атрибутам панели инструментов и vbox менеджера холста фигуры с использованием методов manager.toolbar и manager.vbox соответственно.
manager = fig.canvas.manager
toolbar = manager.toolbar
vbox = manager.vbox
Добавление кнопки на панель инструментов
Мы добавим кнопку на панель инструментов с использованием модуля Gtk. Во - первых, мы создаем кнопку с надписью и подключаем ее к функции, которая выводит сообщение при нажатии. Затем мы создаем элемент инструмента, задаем ему текст подсказки, добавляем кнопку в него и вставляем его в панель инструментов.
button = Gtk.Button(label='Click me')
button.show()
button.connect('clicked', lambda button: print('hi mom'))
toolitem = Gtk.ToolItem()
toolitem.show()
toolitem.set_tooltip_text('Click me for fun and profit')
toolitem.add(button)
pos = 8 ## где вставить это в панель инструментов
toolbar.insert(toolitem, pos)
Добавление метки в VBox
Мы добавим метку в vbox для отображения координат x,y мыши, когда она перетаскивается по оси. Во - первых, мы создаем метку с некоторым текстом и добавляем ее в vbox.
label = Gtk.Label()
label.set_markup('Drag mouse over axes for position')
label.show()
vbox.pack_start(label, False, False, 0)
Обновление текста метки при движении мыши
Мы обновим текст метки для отображения координат x,y мыши, когда она перетаскивается по оси. Мы создаем функцию для обновления текста метки и подключаем ее к событию motion_notify_event с использованием метода mpl_connect().
def update(event):
if event.xdata is None:
label.set_markup('Drag mouse over axes for position')
else:
label.set_markup(
f'<span color="#ef0000">x,y=({event.xdata}, {event.ydata})</span>')
fig.canvas.mpl_connect('motion_notify_event', update)
Отображение графика
Наконец, мы отображаем график с использованием метода show().
plt.show()
Резюме
В этом практическом занятии мы узнали, как использовать Matplotlib для создания и модификации окон с графиками. Мы также изучили, как настраивать графический интерфейс пользователя, доступаясь к базовым виджетам GTK. Мы добавили кнопку на панель инструментов и метку в vbox, а также обновляли текст метки при движении мыши. Мы также построили две линии на оси и добавили легенду, чтобы различать их.