Gtk3 Sgskip 를 이용한 Pylab

Beginner

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

소개

이 랩에서는 Matplotlib 라이브러리를 사용하여 그림 창을 생성하고 수정하는 방법을 배웁니다. 또한 기본 GTK 위젯에 접근하여 GUI 를 사용자 정의하는 방법도 살펴봅니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접근하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중에 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 즉시 문제를 해결해 드리겠습니다.

라이브러리 임포트

먼저, 필요한 라이브러리를 임포트해야 합니다. Matplotlib, GTK3, 그리고 gi.repository 에서 Gtk 모듈을 사용할 것입니다.

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

Figure 및 Axis 생성

다음으로, subplots() 메서드를 사용하여 figure 와 axis 를 생성합니다. 그런 다음 axis 에 두 개의 선을 그리고, 이를 구별하기 위해 범례 (legend) 를 추가합니다.

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()

툴바 (Toolbar) 및 VBox 접근

manager.toolbarmanager.vbox 메서드를 사용하여 figure canvas manager 의 툴바 (toolbar) 및 vbox 속성에 각각 접근합니다.

manager = fig.canvas.manager
toolbar = manager.toolbar
vbox = manager.vbox

툴바 (Toolbar) 에 버튼 추가

Gtk 모듈을 사용하여 툴바 (toolbar) 에 버튼을 추가합니다. 먼저, 레이블 (label) 이 있는 버튼을 생성하고, 클릭 시 메시지를 출력하는 함수에 연결합니다. 그런 다음, toolitem 을 생성하고, 툴팁 텍스트를 설정하고, 버튼을 추가하고, 툴바에 삽입합니다.

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)

VBox 에 레이블 (Label) 추가

축 위로 마우스를 드래그할 때 마우스의 x, y 좌표를 표시하기 위해 vbox 에 레이블 (label) 을 추가합니다. 먼저, 텍스트가 있는 레이블을 생성하고 vbox 에 추가합니다.

label = Gtk.Label()
label.set_markup('Drag mouse over axes for position')
label.show()
vbox.pack_start(label, False, False, 0)

마우스 움직임에 따라 레이블 텍스트 업데이트

축 위로 마우스를 드래그할 때 마우스의 x, y 좌표를 표시하도록 레이블 텍스트를 업데이트합니다. 레이블 텍스트를 업데이트하는 함수를 생성하고, mpl_connect() 메서드를 사용하여 motion_notify_event에 연결합니다.

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 을 사용하여 figure window 를 생성하고 수정하는 방법을 배웠습니다. 또한 기본 GTK 위젯에 접근하여 GUI 를 사용자 정의하는 방법도 살펴보았습니다. 툴바에 버튼을 추가하고, vbox 에 레이블을 추가했으며, 마우스 움직임에 따라 레이블 텍스트를 업데이트했습니다. 또한 축에 두 개의 선을 플롯하고, 이를 구별하기 위해 범례 (legend) 를 추가했습니다.