SlideShare a Scribd company logo
GTK+ Workshop
Yi-Soo An
안이수 (Yi-Soo An)
● Contributor at GNOME
● Open source software
● Containerization
● Github -- https://github.com/memnoth
● GNOME Gitlab -- https://gitlab.gnome.org/memnoth
● Blog -- https://yisooan.wordpress.com/
워크샵 목표
● GTK+ 기본 개념
● 기본 위젯
● 미니 메모장 만들기
Set up
Install Flatpak by script
1. https://github.com/memnoth/gtkworkshop-script
Install Flatpak (Ubuntu)
1. $ sudo add-apt-repository ppa:alexlarsson/flatpak
2. $ sudo apt update
3. $ sudo apt install flatpak gnome-software-plugin-flatpak
4. $ flatpak remote-add --user flathub https://flathub.org/repo/flathub.flatpakrepo
5. $ flatpak remote-modify --user --collection-id=org.flathub.Stable flathub
6. $ flatpak update
7. $ sudo reboot
Install GNOME Sdk 3.30
1. $ flatpak install --user flathub org.gnome.Sdk//3.30
Install GNOME-Builder (IDE)
1. $ flatpak install --user flathub org.gnome.Builder//stable
Clone gtkworkshop repo
1. https://github.com/memnoth/gtkworkshop.git
What and Why GTK+?
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
X Window System (X for short)
● 1984년 MIT의 Jim Gettys, Bob Scheifler에 의해 X Window System 개발
● 1987년 X Version 11 (X11) 릴리즈
● Linux, Unix-like 시스템의Windowing system
● Window라고 불리는영역을화면에생성하는역할
● Window를 위한 Mouse, Keyboard 이벤트핸들링
See more https://stackoverflow.com/a/27515738
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
Cairo
● 2D Graphics drawing 라이브러리
● GTK+의 2D Graphics 백엔드로사용
● LGPL 또는 Mozilla Public 라이선스
● 멀티 플랫폼라이브러리(Linux and Unix-like 시스템, Windows, Mac OS X)
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GDK
● GIMP Drawing Kit의 약자
● GTK+를 특정 Windowing system에서 분리 (Platform Abstraction Layer)
● Window를 위한 Mouse, Keyboard 이벤트핸들링
● LGPL 라이선스
● 멀티 플랫폼라이브러리(Linux and Unix-like 시스템, Windows, Mac OS X)
See more https://stackoverflow.com/a/28454674
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+
● GIMP Tool Kit의 약자
● GIMP는 GNU Image Manipulation Program의 약자
● GIMP 개발에사용된GUI 라이브러리
● 1997년 Peter Mattis, Spencer Kimball, Josh MacDonald에 의해 개발
● LGPL 라이선스
● 멀티 플랫폼라이브러리(Linux and Unix-like 시스템, Windows, Mac OS X)
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
GTK+ 어플리케이션 아키텍처
https://www.gtk.org/overview.php
왜 GTK+?
● 개발자가 2D Graphics, Windowing system API 사용 X
● GTK+는 멀티 플랫폼 라이브러리!
● OS에 관계없이 동일한 출력 결과
Basic Principles
Event-Driven Programming
● 프로그램의흐름이Events에 의해 결정
● 대부분의GUI 프로그래밍은Event-driven programming
● 마우스, 키보드, Pipes, Network sockets, IPC Messages, Processes/Threads 등등
● 이벤트를받는 Main loop 존재
What does Main loop do?
The main event loop manages all the available sources of events for GLib and GTK+ applications. These
events can come from any number of different types of sources such as file descriptors (plain files, pipes or
sockets) and timeouts.
https://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html
1. Events와 Event Handlers 등록
2. 등록된모든 Events를 관리
3. 마우스, 키보드, Pipes, Network sockets, IPC Messages, Processes/Threads 등등
What does Main loop do?
https://commons.wikimedia.org/wiki/File:Event_driven_programming_Simply_Explained.jpg
What does Main loop do?
https://www.boost.org/doc/libs/1_69_0/libs/coroutine/doc/html/coroutine/motivation.html
Main Loop
Signals
● GUI 프로그래밍의기반이되는 메커니즘
● 특정 액션이발생했다고알람을울리는것
● Signal이 발생하면항상 Callback 함수가실행
● 하나의Signal에 여러가지Callback 함수가연결 될 수 있음
Signals and Events
Events
● 프로그램외부에서발생한신호
● 예) Touch, Keyboard, Mouse
Signals
● 프로그램내부에서발생한신호
● 예) Interclass communication
https://stackoverflow.com/a/3794884
Basic Widgets
Gtk.Box
● 위젯(Widget)을 담을 수 있는 컨테이너중 하나
● 화면에보이지않음
● Horizontal Box (수평) / Vertical Box (수직)
● Gtk.Box.pack_start() / Gtk.Box.pack_end() 메서드를이용하여위젯 추가
● Box 안에 또 다른 Box 를 담을 수 있음
lesson2.py
Gtk.HeaderBar
● Gtk.Box의 Horizontal Box와 비슷
● 위젯을추가할수 있음
● Gtk.HeaderBar.pack_start() / Gtk.HeaderBar.pack_end() 메서드를이용하여위젯 추가
● Title / Subtitle 설정
● 윈도우프레임제어 기능 제공 (최소화/ 최대화/ 닫기)
● GTK+ 어플리케이션개발에서일반적으로사용하는기능
lesson3.py
Mini Project (My Editor)
Mini Project (My Editor) MyHeaderBar.py
MyMainBox.py
Mini Project (My Editor) MyHeaderBar.py
MyMainBox.py
TextView

More Related Content

What's hot (20)

PDF
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
Ubuntu Korea Community
 
PDF
git 간단한 사용방법
Oh Dongju
 
PDF
Git & GitHub
Jongmin Park
 
PPTX
Go 1.설치와 세팅
재봉 이
 
PPTX
Cura Packaging on Win32
Jinbuhm Kim
 
PPTX
Cura localization and packaging on Win32
Jinbuhm Kim
 
PDF
Snaps on Ubuntu Desktop
Youngbin Han
 
PDF
버추얼박스에 우분투그놈 14.04LTS 설치하기
licubeclub
 
PPT
Windows에서 go+eclipse 개발환경 구축
Jaehoon Kim
 
PDF
오픈소스 맛보기 - 정민우님
NAVER D2
 
PDF
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Youngbin Han
 
PPTX
Git 분산버전관리 시스템(1)
Hyunjun Roh
 
PDF
git-workflow
Aria (In Suk) Kim
 
PDF
Docker at Deview 2013
Jude Kim
 
PDF
쌍용강북교육센터 수강생을 위한 Github
alan1011
 
PPTX
[14.06.11] KENNYDROID for Pi FINAL
Hyeonmin Park
 
PDF
알아두면 쓸모있는 깃허브 1
Hansol Kang
 
PDF
GitHub로 프로젝트 운영하기
Lee Geonhee
 
PPTX
Git로 협업하기
Kim Byoungsu
 
PDF
Deploying flask with nginx & uWSGI
정주 김
 
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
Ubuntu Korea Community
 
git 간단한 사용방법
Oh Dongju
 
Git & GitHub
Jongmin Park
 
Go 1.설치와 세팅
재봉 이
 
Cura Packaging on Win32
Jinbuhm Kim
 
Cura localization and packaging on Win32
Jinbuhm Kim
 
Snaps on Ubuntu Desktop
Youngbin Han
 
버추얼박스에 우분투그놈 14.04LTS 설치하기
licubeclub
 
Windows에서 go+eclipse 개발환경 구축
Jaehoon Kim
 
오픈소스 맛보기 - 정민우님
NAVER D2
 
Git 과 GitHub 를 이용한 버전관리와 협업 - 1주차 - 첫 커밋 푸시하기
Youngbin Han
 
Git 분산버전관리 시스템(1)
Hyunjun Roh
 
git-workflow
Aria (In Suk) Kim
 
Docker at Deview 2013
Jude Kim
 
쌍용강북교육센터 수강생을 위한 Github
alan1011
 
[14.06.11] KENNYDROID for Pi FINAL
Hyeonmin Park
 
알아두면 쓸모있는 깃허브 1
Hansol Kang
 
GitHub로 프로젝트 운영하기
Lee Geonhee
 
Git로 협업하기
Kim Byoungsu
 
Deploying flask with nginx & uWSGI
정주 김
 

Similar to Python을 이용한 Linux Desktop Application (20)

PPTX
공간정보아카데미 - Day1 오픈소스개발 일반
BJ Jang
 
PDF
코분투메뉴얼 10.04 Cobuntu Manual
Ubuntu Korea Community
 
PDF
3.ubuntu custom
sprdd
 
PDF
HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)
JinKwon Lee
 
PDF
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
Ubuntu Korea Community
 
PDF
Introduce Cobuntu 9.04
Ubuntu Korea Community
 
PDF
오픈소스 모니터링 알아보기(Learn about opensource monitoring)
SeungYong Baek
 
PDF
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
OnGameServer
 
PDF
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
MinPa Lee
 
PDF
도커없이 컨테이너 만들기 1편
Sam Kim
 
PDF
제로부터시작하는 Git 두번째 이야기
Mario Cho
 
PDF
[1A6]Docker로 보는 서버 운영의 미래
NAVER D2
 
PDF
Git 코드랩 스터디 1
승빈이네 공작소
 
PDF
Internship backend
Yein Sim
 
PDF
시스템 관리자를 위한 리눅스강의 1강 20130203
doo rip choi
 
PDF
DevOps - CI/CD 알아보기
SeungYong Baek
 
PDF
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
NAVER Engineering
 
PDF
제로부터시작하는Git
Mario Cho
 
PPTX
Raspberry-PI GPIO with Python
sewoo lee
 
PDF
How to contribute at OpenStack
SK Telecom
 
공간정보아카데미 - Day1 오픈소스개발 일반
BJ Jang
 
코분투메뉴얼 10.04 Cobuntu Manual
Ubuntu Korea Community
 
3.ubuntu custom
sprdd
 
HTML5로 만드는 데스크탑 어플리케이션 (Node-Webkit)
JinKwon Lee
 
강분도 - 나만의 우분투 배포판 만들기 (2011Y06M25D)
Ubuntu Korea Community
 
Introduce Cobuntu 9.04
Ubuntu Korea Community
 
오픈소스 모니터링 알아보기(Learn about opensource monitoring)
SeungYong Baek
 
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
OnGameServer
 
PyQGIS와 PyQt를 이용한 QGIS 기능 확장
MinPa Lee
 
도커없이 컨테이너 만들기 1편
Sam Kim
 
제로부터시작하는 Git 두번째 이야기
Mario Cho
 
[1A6]Docker로 보는 서버 운영의 미래
NAVER D2
 
Git 코드랩 스터디 1
승빈이네 공작소
 
Internship backend
Yein Sim
 
시스템 관리자를 위한 리눅스강의 1강 20130203
doo rip choi
 
DevOps - CI/CD 알아보기
SeungYong Baek
 
[TECHCON 2019: MOBILE - Android]7.20분만에 만들어보는 라이브 방송 앱
NAVER Engineering
 
제로부터시작하는Git
Mario Cho
 
Raspberry-PI GPIO with Python
sewoo lee
 
How to contribute at OpenStack
SK Telecom
 
Ad

More from Ubuntu Korea Community (20)

PDF
권총 사격하러 우분투 써밋 참가한 썰.txt
Ubuntu Korea Community
 
PDF
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
Ubuntu Korea Community
 
PDF
우분투한국커뮤니티 2022년 활동 정리
Ubuntu Korea Community
 
PDF
우분투한국커뮤니티 2022년 신년회
Ubuntu Korea Community
 
PDF
Ubuntu Korea at FOSSASIA Summit 2022
Ubuntu Korea Community
 
PDF
Usage of the MQTT
Ubuntu Korea Community
 
PDF
Open Source and the License
Ubuntu Korea Community
 
PDF
Memory Attack - The Memory Attack Techniques
Ubuntu Korea Community
 
PDF
나의 우분투 이야기
Ubuntu Korea Community
 
PDF
Malware Dataset & Ubuntu
Ubuntu Korea Community
 
PDF
케라스와 함께하는 재밌는 딥러닝 활용 사례들
Ubuntu Korea Community
 
PDF
딥러닝 세계에 입문하기 위반 분투
Ubuntu Korea Community
 
PDF
9월 서울지역 세미나 GPG 키사이닝 파티
Ubuntu Korea Community
 
PDF
우분투한국커뮤니티 2018년도 상반기 활동 보고
Ubuntu Korea Community
 
PDF
새로운 Libhanjp 라이브러리 구조
Ubuntu Korea Community
 
PDF
스타트업에서 하드웨어 개발 프로세스 도입하기
Ubuntu Korea Community
 
PDF
기계들의 소셜 미디어, MQTT
Ubuntu Korea Community
 
PDF
모바일에 딥러닝 심기
Ubuntu Korea Community
 
PDF
지방에서 개발자 커뮤니티 운영하기
Ubuntu Korea Community
 
PDF
VM이랑은 무관한 컨테이너 이야기
Ubuntu Korea Community
 
권총 사격하러 우분투 써밋 참가한 썰.txt
Ubuntu Korea Community
 
머신러닝/딥러닝 개발자/연구자에게 필요한 개발/연구 환경
Ubuntu Korea Community
 
우분투한국커뮤니티 2022년 활동 정리
Ubuntu Korea Community
 
우분투한국커뮤니티 2022년 신년회
Ubuntu Korea Community
 
Ubuntu Korea at FOSSASIA Summit 2022
Ubuntu Korea Community
 
Usage of the MQTT
Ubuntu Korea Community
 
Open Source and the License
Ubuntu Korea Community
 
Memory Attack - The Memory Attack Techniques
Ubuntu Korea Community
 
나의 우분투 이야기
Ubuntu Korea Community
 
Malware Dataset & Ubuntu
Ubuntu Korea Community
 
케라스와 함께하는 재밌는 딥러닝 활용 사례들
Ubuntu Korea Community
 
딥러닝 세계에 입문하기 위반 분투
Ubuntu Korea Community
 
9월 서울지역 세미나 GPG 키사이닝 파티
Ubuntu Korea Community
 
우분투한국커뮤니티 2018년도 상반기 활동 보고
Ubuntu Korea Community
 
새로운 Libhanjp 라이브러리 구조
Ubuntu Korea Community
 
스타트업에서 하드웨어 개발 프로세스 도입하기
Ubuntu Korea Community
 
기계들의 소셜 미디어, MQTT
Ubuntu Korea Community
 
모바일에 딥러닝 심기
Ubuntu Korea Community
 
지방에서 개발자 커뮤니티 운영하기
Ubuntu Korea Community
 
VM이랑은 무관한 컨테이너 이야기
Ubuntu Korea Community
 
Ad

Python을 이용한 Linux Desktop Application