본문 바로가기
GD's IT Lectures : 기초부터 시리즈/파이썬(Python) 기초부터 ~

[파이썬(PYTHON) : 고급] GUI 프로그래밍

by GDNGY 2023. 5. 14.

7. GUI 프로그래밍

GUI(Graphical User Interface)는 사용자와 컴퓨터 사이의 상호작용을 도와주는 그래픽 인터페이스를 말합니다. 파이썬은 여러 GUI 라이브러리를 지원하며, 이번 장에서는 Tkinter, PyQt5, Kivy를 중심으로 알아보겠습니다. 또한, 개발한 GUI 애플리케이션을 어떻게 패키징하고 배포할 수 있는지에 대해서도 다루도록 하겠습니다.

 

7.1. Tkinter 기초

7.1.1. Tkinter 소개

Tkinter는 파이썬에서 가장 널리 사용되는 GUI 툴킷 중 하나입니다. 가볍고 간단한 GUI 프로그래밍을 원하는 경우 Tkinter를 사용하는 것이 좋습니다. 기본적으로 파이썬에 내장되어 있어 별도의 설치 없이 사용할 수 있습니다.

 

7.1.1.1. Tkinter의 특징

Tkinter는 스크립트 언어 Tcl/Tk의 파이썬 바인딩입니다. 매우 가벼우며, 간단한 GUI 애플리케이션을 빠르게 개발할 수 있습니다.

 

7.1.1.2. Tkinter 설치 및 사용법

Tkinter는 파이썬 표준 라이브러리로서 별도의 설치 없이 import tkinter로 바로 사용할 수 있습니다.

import tkinter as tk

root = tk.Tk()
root.mainloop()

 

위 코드는 Tkinter를 import 하고, Tk 객체를 생성하여 이벤트 루프를 시작하는 기본적인 Tkinter 애플리케이션입니다. 이 코드를 실행하면 빈 창이 하나 뜹니다.

 

7.1.2. Tkinter로 간단한 GUI 만들기

Tkinter로 GUI를 만들기 위해서는 위젯(widget)이라는 GUI 요소들을 사용합니다. 위젯에는 버튼, 레이블, 텍스트 박스 등이 있습니다.

 

7.1.2.1. 창 생성 및 위젯 추가

Tkinter에서 창을 생성하고, 위젯을 추가하는 방법에 대해 알아보겠습니다.

import tkinter as tk

root = tk.Tk()

label = tk.Label(root, text="Hello, Tkinter!")
label.pack()

root.mainloop()

 

위 코드는 "Hello, Tkinter!"라는 텍스트를 가진 레이블을 생성하고, 이를 root 창에 추가하는 코드입니다. pack 메서드는 위젯을 창에 맞게 조정합니다.

 

7.1.2.2. 이벤트 처리하기

GUI 애플리케이션에서는 사용자의 입력에 반응해야 합니다. 이를 위해 Tkinter에서는 이벤트 핸들러(event handler) 또는 콜백(callback) 함수를 사용합니다.

import tkinter as tk

def greet():
    print("Hello, Tkinter!")

root = tk.Tk()
button = tk.Button(root, text="Greet", command=greet)
button.pack()

root.mainloop()

 

위 코드는 "Greet"라는 버튼을 생성하고, 이 버튼을 클릭하면 콘솔에 "Hello, Tkinter!"를 출력하는 이벤트 핸들러를 설정하는 예제입니다.

 

반응형

 

7.2. PyQt5 기초

7.2.1. PyQt5 소개

PyQt5는 Qt라는 C++ 라이브러리를 파이썬에서 사용할 수 있도록 한 라이브러리입니다. Qt는 강력하고 풍부한 기능을 제공하는 GUI 툴킷으로 알려져 있습니다.

 

7.2.1.1. PyQt5의 특징

PyQt5는 Qt의 모든 기능을 파이썬으로 사용할 수 있습니다. 따라서 풍부한 GUI 기능뿐만 아니라 네트워크, 데이터베이스, XML 처리 등 다양한 기능을 사용할 수 있습니다.

 

7.2.1.2. PyQt5 설치 및 사용법

PyQt5는 pip를 통해 설치할 수 있습니다.

pip install pyqt5

 

PyQt5를 사용하기 위해서는 PyQt5.QtWidgets 모듈을 import해야 합니다.

from PyQt5.QtWidgets import QApplication, QLabel

app = QApplication([])
label = QLabel('Hello, PyQt5!')
label.show()

app.exec_()

 

이 코드는 PyQt5로 "Hello, PyQt5!"라는 레이블을 보여주는 간단한 애플리케이션을 만드는 예제입니다.

 

7.2.2. PyQt5로 간단한 GUI 만들기

PyQt5로 GUI를 만드는 방법은 Tkinter와 비슷합니다. 하지만, PyQt5는 더 많은 GUI 요소와 기능을 제공합니다.

 

7.2.2.1. 창 생성 및 위젯 추가

PyQt5에서 창을 생성하고 위젯을 추가하는 방법을 알아보겠습니다.

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

app = QApplication([])
window = QMainWindow()
button = QPushButton('Click me')

window.setCentralWidget(button)
window.show()

app.exec_()

 

이 코드는 "Click me"라는 버튼을 가진 창을 생성하는 예제입니다.

 

7.2.2.2. 이벤트 처리하기

PyQt5에서도 이벤트 처리는 필수입니다. PyQt5에서는 clicked 같은 시그널(signal)을 이용하여 사용자의 동작에 반응하는 방식으로 이벤트를 처리합니다.

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton

def on_button_clicked():
    print("Button clicked!")

app = QApplication([])
window = QMainWindow()
button = QPushButton('Click me')

button.clicked.connect(on_button_clicked)

window.setCentralWidget(button)
window.show()

app.exec_()

 

위 코드는 버튼이 클릭될 때 "Button clicked!"를 출력하는 이벤트 핸들러를 추가하는 예제입니다.

 

7.3. Kivy 기초

7.3.1. Kivy 소개

Kivy는 다양한 플랫폼에서 동작하는 모바일 애플리케이션을 작성하기 위한 파이썬 라이브러리로, GUI 애플리케이션을 작성할 수 있게 도와주는 오픈소스 파이썬 라이브러리입니다.

 

7.3.1.1. Kivy의 특징

Kivy는 다양한 플랫폼(Windows, macOS, Linux, Android, iOS 등)에서 동작하며, 다중 터치, 제스처 인식 등 터치 스크린에 최적화된 기능을 제공합니다.

 

7.3.1.2. Kivy 설치 및 사용법

Kivy는 pip를 통해 설치할 수 있습니다.

pip install kivy

 

Kivy를 사용하기 위해서는 kivy.app.App 클래스를 상속받아 애플리케이션을 작성합니다.

from kivy.app import App
from kivy.uix.button import Button

class MyApp(App):
    def build(self):
        return Button(text='Hello, Kivy!')

if __name__ == '__main__':
    MyApp().run()

 

이 코드는 "Hello, Kivy!"라는 버튼을 보여주는 Kivy 애플리케이션을 만드는 예제입니다.

 

7.3.2. Kivy로 간단한 GUI 만들기

Kivy로 GUI를 만드는 방법은 다른 라이브러리와 약간 다릅니다. Kivy에서는 .kv 파일을 이용한 선언적인 방식으로 GUI를 구성합니다.

 

7.3.2.1. 창 생성 및 위젯 추가

Kivy에서 창을 생성하고 위젯을 추가하는 방법을 알아보겠습니다.

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button

class MyApp(App):
    def build(self):
        layout = BoxLayout(orientation='vertical')
        button = Button(text='Hello, Kivy!')
        layout.add_widget(button)
        return layout

if __name__ == '__main__':
    MyApp().run()

 

위 코드는 "Hello, Kivy!"라는 버튼을 추가한 창을 생성하는 예제입니다.


7.3.2.2. 이벤트 처리하기

Kivy에서 이벤트 처리는 이벤트 바인딩을 통해 수행됩니다.

from kivy.app import App
from kivy.uix.button import Button

def on_button_click(instance):
    print('Button clicked!')

class MyApp(App):
    def build(self):
        button = Button(text='Hello, Kivy!')
        button.bind(on_release=on_button_click)
        return button

if __name__ == '__main__':
    MyApp().run()

 

위 코드는 버튼을 클릭하면 'Button clicked!'를 출력하는 이벤트 핸들러를 추가하는 예제입니다.

 

7.4. GUI 애플리케이션 배포

7.4.1. GUI 애플리케이션 패키징

GUI 애플리케이션을 배포하기 위해서는 먼저 애플리케이션을 패키징해야 합니다. 패키징은 파이썬 스크립트를 실행 파일로 변환하는 과정을 말합니다.

 

7.4.1.1. PyInstaller를 이용한 패키징

PyInstaller는 파이썬 스크립트를 실행 파일로 변환하는 도구입니다.

pip install pyinstaller
pyinstaller your_script.py

 

위 명령을 실행하면 your_script.py 파일이 실행 파일로 변환됩니다. 변환된 실행 파일은 dist 디렉토리 아래에 생성됩니다.

 

7.4.1.2. cx_Freeze를 이용한 패키징

cx_Freeze는 PyInstaller와 유사하게 파이썬 스크립트를 실행 파일로 변환하는 도구입니다.

pip install cx_Freeze
cxfreeze your_script.py --target-dir dist

 

위 명령을 실행하면 your_script.py 파일이 실행 파일로 변환됩니다. 변환된 실행 파일은 dist 디렉토리 아래에 생성됩니다.

 

7.4.2. GUI 애플리케이션 배포 전략

GUI 애플리케이션을 패키징한 후에는 사용자들에게 배포해야 합니다. 배포 방식은 OS와 애플리케이션의 특성에 따라 다릅니다.

 

7.4.2.1. OS별 배포 전략

  • Windows에서는 변환된 실행 파일을 직접 배포하거나, 인스톨러를 만들어 배포할 수 있습니다.
  • macOS에서는 .app 형태의 응용 프로그램 패키지나 .dmg 형태의 디스크 이미지 파일로 배포합니다.
  • Linux에서는 변환된 실행 파일을 .deb 패키지나 .rpm 패키지 등으로 배포합니다.

 

7.4.2.2. 업데이트 관리 전략

애플리케이션을 배포한 후에도 사용자에게 최신 버전을 제공하기 위해 업데이트 관리 전략이 필요합니다.
애플리케이션 내부에 자동 업데이트 기능을 구현하거나, 웹사이트나 앱스토어 등을 통해 최신 버전을 제공할 수 있습니다.
업데이트 관리 전략은 애플리케이션의 특성, 사용자의 플랫폼, 업데이트 빈도 등 여러 요소를 고려해 결정해야 합니다.

 

Tkinter, PyQt5, Kivy는 파이썬에서 GUI 애플리케이션을 만들기 위한 대표적인 라이브러리들입니다.

 

 

 

2023.05.14 - [GD's IT Lectures : 기초부터 시리즈/파이썬(Python) 기초부터 ~] - [파이썬(PYTHON) : 고급] 머신러닝 및 딥러닝

 

[파이썬(PYTHON) : 고급] 머신러닝 및 딥러닝

6. 머신러닝 및 딥러닝 Scikit-learn, Tensorflow, PyTorch 등의 라이브러리를 사용하여 머신러닝 및 딥러닝 모델을 학습하고 적용하는 방법을 배웁니다. 이 과정에서 데이터 전처리, 모델 학습, 검증, 최

gdngy.tistory.com

 

반응형

댓글