Pylab с Gtk3 Sgskip

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии мы научимся использовать библиотеку 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, а также обновляли текст метки при движении мыши. Мы также построили две линии на оси и добавили легенду, чтобы различать их.