Введение
В этом практическом занятии мы научимся использовать pyplot для управления окнами графиков, но модифицировать графический интерфейс пользователя, доступаясь к базовым виджетам GTK. Мы создадим график с двумя графиками и добавим кнопку на панель инструментов и метку на холст. Также добавим функциональность для отображения координат курсора при его перемещении по графикам.
Советы по работе с ВМ
После запуска виртуальной машины кликните в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импортируем необходимые библиотеки
import matplotlib
matplotlib.use('GTK4Agg')
import gi
import matplotlib.pyplot as plt
gi.require_version('Gtk', '4.0')
from gi.repository import Gtk
Мы импортируем необходимые библиотеки, включая matplotlib, gi, pyplot и Gtk. Мы настраиваем бэкенд matplotlib для использования GTK4.
Создаем фигуру и графики
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
manager = fig.canvas.manager
toolbar = manager.toolbar
vbox = manager.vbox
Мы получаем доступ к атрибутам toolbar и vbox менеджера холста фигуры.
Добавляем кнопку на панель инструментов
button = Gtk.Button(label='Click me')
button.connect('clicked', lambda button: print('hi mom'))
button.set_tooltip_text('Click me for fun and profit')
toolbar.append(button)
Мы создаем кнопку с надписью и подсказкой, и подключаем ее к функции, которая выводит сообщение в консоль. Добавляем кнопку на панель инструментов.
Добавляем метку на холст
label = Gtk.Label()
label.set_markup('Drag mouse over axes for position')
vbox.insert_child_after(label, fig.canvas)
Мы создаем метку и задаем ее текст. Добавляем метку в vbox после холста фигуры.
Обновляем метку координатами курсора
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)
Мы создаем функцию, которая обновляет метку координатами x и y курсора, когда он перемещается над графиками. Соединяем функцию с событием motion_notify_event холста.
Отображаем фигуру
plt.show()
Мы отображаем фигуру с добавленной кнопкой и меткой.
Резюме
В этом практическом занятии мы узнали, как использовать pyplot для управления окнами фигур, но модифицировать графический интерфейс пользователя, доступаясь к базовым виджетам GTK. Мы создали фигуру с двумя графиками, добавили кнопку на панель инструментов и метку на холст. Мы также добавили функциональность для отображения координат курсора, когда он перемещается над графиками. Это практическое занятие дает базовое понимание того, как настраивать графический интерфейс пользователя matplotlib-фигуры с использованием GTK4.