Pylab с Gtk4 Sgskip

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии мы научимся использовать 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.