Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Python을 이용한 Linux Desktop Application

136 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

×