Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Python을 이용한 Linux Desktop Application

92 visualizaciones

Publicado el

2019.01.13 - Ubuntu Workshop, Daejeon (우분투 워크숍, 대전)

Publicado en: Software
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Python을 이용한 Linux Desktop Application

  1. 1. GTK+ Workshop Yi-Soo An
  2. 2. 안이수 (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/
  3. 3. 워크샵 목표 ● GTK+ 기본 개념 ● 기본 위젯 ● 미니 메모장 만들기
  4. 4. Set up
  5. 5. Install Flatpak by script 1. https://github.com/memnoth/gtkworkshop-script
  6. 6. 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
  7. 7. Install GNOME Sdk 3.30 1. $ flatpak install --user flathub org.gnome.Sdk//3.30
  8. 8. Install GNOME-Builder (IDE) 1. $ flatpak install --user flathub org.gnome.Builder//stable
  9. 9. Clone gtkworkshop repo 1. https://github.com/memnoth/gtkworkshop.git
  10. 10. What and Why GTK+?
  11. 11. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  12. 12. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  13. 13. 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
  14. 14. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  15. 15. Cairo ● 2D Graphics drawing 라이브러리 ● GTK+의 2D Graphics 백엔드로사용 ● LGPL 또는 Mozilla Public 라이선스 ● 멀티 플랫폼라이브러리(Linux and Unix-like 시스템, Windows, Mac OS X)
  16. 16. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  17. 17. 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
  18. 18. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  19. 19. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  20. 20. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  21. 21. 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)
  22. 22. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  23. 23. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  24. 24. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  25. 25. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  26. 26. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  27. 27. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  28. 28. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  29. 29. GTK+ 어플리케이션 아키텍처 https://www.gtk.org/overview.php
  30. 30. 왜 GTK+? ● 개발자가 2D Graphics, Windowing system API 사용 X ● GTK+는 멀티 플랫폼 라이브러리! ● OS에 관계없이 동일한 출력 결과
  31. 31. Basic Principles
  32. 32. Event-Driven Programming ● 프로그램의흐름이Events에 의해 결정 ● 대부분의GUI 프로그래밍은Event-driven programming ● 마우스, 키보드, Pipes, Network sockets, IPC Messages, Processes/Threads 등등 ● 이벤트를받는 Main loop 존재
  33. 33. 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 등등
  34. 34. What does Main loop do? https://commons.wikimedia.org/wiki/File:Event_driven_programming_Simply_Explained.jpg
  35. 35. What does Main loop do? https://www.boost.org/doc/libs/1_69_0/libs/coroutine/doc/html/coroutine/motivation.html Main Loop
  36. 36. Signals ● GUI 프로그래밍의기반이되는 메커니즘 ● 특정 액션이발생했다고알람을울리는것 ● Signal이 발생하면항상 Callback 함수가실행 ● 하나의Signal에 여러가지Callback 함수가연결 될 수 있음
  37. 37. Signals and Events Events ● 프로그램외부에서발생한신호 ● 예) Touch, Keyboard, Mouse Signals ● 프로그램내부에서발생한신호 ● 예) Interclass communication https://stackoverflow.com/a/3794884
  38. 38. Basic Widgets
  39. 39. Gtk.Box ● 위젯(Widget)을 담을 수 있는 컨테이너중 하나 ● 화면에보이지않음 ● Horizontal Box (수평) / Vertical Box (수직) ● Gtk.Box.pack_start() / Gtk.Box.pack_end() 메서드를이용하여위젯 추가 ● Box 안에 또 다른 Box 를 담을 수 있음 lesson2.py
  40. 40. Gtk.HeaderBar ● Gtk.Box의 Horizontal Box와 비슷 ● 위젯을추가할수 있음 ● Gtk.HeaderBar.pack_start() / Gtk.HeaderBar.pack_end() 메서드를이용하여위젯 추가 ● Title / Subtitle 설정 ● 윈도우프레임제어 기능 제공 (최소화/ 최대화/ 닫기) ● GTK+ 어플리케이션개발에서일반적으로사용하는기능 lesson3.py
  41. 41. Mini Project (My Editor)
  42. 42. Mini Project (My Editor) MyHeaderBar.py MyMainBox.py
  43. 43. Mini Project (My Editor) MyHeaderBar.py MyMainBox.py TextView

×