Introdução
Neste laboratório, aprenderemos como usar a biblioteca Matplotlib para criar e modificar janelas de figuras. Também exploraremos como personalizar a GUI acessando os widgets GTK subjacentes.
Dicas para a VM
Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.
Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido às limitações do Jupyter Notebook.
Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.
Importar Bibliotecas
Primeiramente, precisamos importar as bibliotecas necessárias. Usaremos Matplotlib, GTK3 e o módulo Gtk do gi.repository.
import matplotlib
matplotlib.use('GTK3Agg') ## or 'GTK3Cairo'
import gi
import matplotlib.pyplot as plt
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
Criar Figura e Eixos
Em seguida, criaremos uma figura e eixos usando o método subplots(). Em seguida, plotaremos duas linhas nos eixos e adicionaremos uma legenda para distingui-las.
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()
Acessar Toolbar e VBox
Acessaremos os atributos toolbar e vbox do gerenciador de canvas da figura usando os métodos manager.toolbar e manager.vbox, respectivamente.
manager = fig.canvas.manager
toolbar = manager.toolbar
vbox = manager.vbox
Adicionar Botão à Toolbar
Adicionaremos um botão à toolbar usando o módulo Gtk. Primeiro, criamos um botão com um rótulo e o conectamos a uma função para imprimir uma mensagem quando clicado. Em seguida, criamos um toolitem, definimos seu texto de dica de ferramenta (tooltip), adicionamos o botão a ele e o inserimos na toolbar.
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 ## where to insert this in the toolbar
toolbar.insert(toolitem, pos)
Adicionar Rótulo ao VBox
Adicionaremos um rótulo ao vbox para exibir as coordenadas x,y do mouse quando ele for arrastado sobre os eixos. Primeiro, criamos um rótulo com algum texto e o adicionamos ao vbox.
label = Gtk.Label()
label.set_markup('Drag mouse over axes for position')
label.show()
vbox.pack_start(label, False, False, 0)
Atualizar o Texto do Rótulo no Movimento do Mouse
Atualizaremos o texto do rótulo para exibir as coordenadas x,y do mouse quando ele for arrastado sobre o eixo. Criamos uma função para atualizar o texto do rótulo e a conectamos ao motion_notify_event usando o método 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)
Exibir o Gráfico
Finalmente, exibimos o gráfico usando o método show().
plt.show()
Resumo
Neste laboratório, aprendemos como usar Matplotlib para criar e modificar janelas de figuras. Também exploramos como personalizar a GUI acessando os widgets GTK subjacentes. Adicionamos um botão à barra de ferramentas e um rótulo ao vbox, e atualizamos o texto do rótulo no movimento do mouse. Também plotamos duas linhas em um eixo e adicionamos uma legenda para distingui-las.