QT/Basic Tutorial

<PyQt><객체지향 3> PyQT란?

LEEHANDS 2021. 4. 26. 20:40
반응형

파이썬에서 GUI 프로그래밍을 하려면 어떻게 해야 할까요? 정답은 바로 '모듈'입니다. 파이썬이 제공하는 모듈을 사용해서 쉽게 GUI 프로그램을 만들 수 있습니다. 파이썬에서 주로 사용되는 GUI 모듈은 다음과 같이 세 가지 정도 있습니다. 

  • TkInter
  • wxPython
  • PyQt

TkInter는 파이썬의 공식 설치 파일에 포함되어 있어 모듈의 추가 설치 없이 GUI 프로그래밍이 가능합니다. 또한 다른 GUI 모듈에 비해 간단해서 배우기가 쉽습니다. 하지만 오래전에 모듈 개발이 완료돼서 UI 디자인이 구식이며 최신 트렌드와 맞지 않습니다. 

 

pyQt는 아나콘다 배포판에 포함되어 있어 아나콘다를 설치했다면 바로 프로그래밍을 시작할 수 있기 때문입니다. 

PyQt가 무엇인지 잠깐 살펴보겠습니다. PyQt는 riverbankcomputing에서 개발한 파이썬 모듈입니다. Py는 Python을 의미하고 Qt는 GUI 프로그래밍을 위한 라이브러리를 의미합니다. 파이썬에서 라이브러리는 모듈들의 집합이라고 생각하면 쉽습니다. Qt는 버전 4와 버전 5가 많이 사용되며, 아나콘다에는 최신 버전인 PyQt5가 포함되어 있습니다. pyQt5 모듈을 사용해서 GUI 프로그램을 개발해 보겠습니다.

 

1. Class

PyQt는 대부분 클래스를 사용합니다.

PyQt에 대해 배우기 전에 먼저 클래스의 기본 내용을 복습해 봅시다. 다음은 Car 클래스를 정의하는 코드입니다.

 

class Car:
	def __init__(self, model, year):
		self.model = model
		self.year = year

def키워드는 함수를 정의하는 파이썬 키워드였지요?

클래스 안에 정의된 함수를 특별히 메서드라고 부른다고 했습니다.

그중에서도 __init__은 클래스에서 특별한 기능을 하는 메서드로 '초기화자'로 불립니다.

초기화자는 클래스로부터 객체가 생성될 때 자동으로 호출됩니다.

 

위 코드에서 초기화자를 살펴보면 Car라는 클래스로부터 객체를 생성할 때 자동차의 모델 (model)과 연식 (year)을 입력받습니다.

함수의 기본은 어떤 입력을 받아 동작(기능)을 수행한 후 값을 리턴하는 것이죠?

따라서 초기화자에서 어떤 값을 받는 것은 매우 자연스러운 일입니다. 입력받은 model과 year 값을 객체가 바인딩하기 위해서 self.model = model, self.year = year라고 코딩하는 겁니다.

self가 이해가 되지 않는 분들은 다시 클래스에 대해서 복습을 하고 이어서 읽기 바랍니다.

 

여기까지는 Car 클래스를 정의한 것입니다. 클래스의 정의만으로는 어떤 코드도 실행되지 않습니다.

자동차 생산 공장으로 비유하면, 자동차에 대한 설계도를 그린 것과 같습니다.

설계도로 실제 자동차를 만들어야 자동차를 사용할 수 있겠죠.

다음 코드와 같이 클래스 이름을 적고 ()를 붙여주면 클래스의 객체가 생성됩니다.

다만 Car 클래스는 객체를 생성하고자 할 때 model과 year를 입력해야 합니다.

2017년식 소나타와 2018년식 G80을 만들고 sonata와 g80 변수에 각각 바인딩했습니다.

 

sonata = Car("SONATA", 2017)
g80 = Car("G80", 2018)

클래스로부터 객체가 생성되면, 해당 객체는 고유의 메모리 공간을 갖습니다.

그리고 변수가 메모리 공간을 가리키는 것이죠. 객체를 바인딩하는 변수에 (예: sonata, g80)에 점 (.)을 찍으면 해당 객체에 접근하여 객체에 저장된 값이나 클래스의 메서드를 이용할 수 있습니다. 다음 코드를 살펴봅시다. sonata 변수에 점 (.)을 찍은 후 model과 year 값을 출력합니다. g80 변수에도 점 (.)을 찍은 후 model과 year 값을 출력할 수 있습니다.

 

print(sonata.model, sonata.year)
print(g80.model, g80.year)

지금까지 작성한 전체 코드는 다음과 같습니다.

 

class Car:
	def __init__(self, model, year):
    	self.model = model
		self.year = year

sonata = Car("SONATA", 2017)
g80 = Car("G80", 2018)

print(sonata.model, sonata.year)
print(g80.model, g80.year)
반응형