Programming/Python

파이썬 PyQt 모듈

알로그 2020. 11. 29. 16:33
반응형

파이썬 PyQt

윈도우 GUI 프로그래밍을 위해 자주 사용되는 pyqt에 대해 알아보자.

윈도우 매크로나 자동화 프로그램을 만들 때 간단하고 빠르게 만들어서 사용할 수 있다.

 

pyqt는 기본적으로 anaconda에는 내장되어 있으며 아래 명령어를 통해 설치 및 버전을 확인할 수 있다.

 

 

<아나콘다 pyqt 설치 및 버전 확인>

conda list pyqt

 

본인이 아나콘다를 사용하고 있지 않다면 pip 명령어를 통해 pyqt를 설치하자.

<pyqt 설치>

pip install PyQt5

 

<pyqt 동작원리>

pyqt를 통해 만든 프로그램은 다양한 위젯(button, label, table 등)으로 구성되며, 사용자가 이벤트(클릭 등)를 주면 미리 대기하고 있던 이벤트 루프에서 콜백 함수(pyqt에서는 slot이라고 부름)를 호출하는 구조이다.

 

<소스코드>

import sys
from PyQt5.QtWidgets import *

app = QApplication(sys.argv)
label = QLabel("Hello PyQt !")
label.show()

print("이벤트루프 실행 전")
app.exec_()
print("이벤트루프 실행 후")

 

<결과>

프로그램을 실행하면 아래와 같이 윈도우 프로그램을 뜨고, 이벤트 루프가 실행되며 창을 종료하면 prit("이벤트루프 실행 후")가 찍히게 된다. 

pyqt 실행

 

몇 가지 위젯(label, text, table, button)에 대해서만 더 살펴보자.

위젯의 위치는 move, 사이즈는 resize 함수를 통해 작성된다.

 

나머지 명령어도 대충 함수명만 보면 직관적으로 알 수 있다.

from PyQt5.QtWidgets import *

class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()

        # 윈도우 프로그램 사이즈 및 타이틀
        self.resize(600, 600)
        self.setWindowTitle("MyApp")

        # Label 생성
        label = QLabel("ID", self)
        label.setGeometry(10, 10, 30, 40)

        # Text 생성
        text = QLineEdit(self)
        text.setGeometry(50, 10, 250, 40)
        # text = QTextEdit(self)    # TextEdit은 여러 줄에 사용
        # textEdit.setText("Hi")

        # Table 생성
        table = QTableWidget(self)
        table.move(10, 80)
        table.setColumnCount(2)
        table.setRowCount(5)
        table.setHorizontalHeaderLabels(["이름", "나이"])
        table.setVerticalHeaderLabels(["a", "b", "c", "d", "e"])
        # table.verticalHeader().setVisible(False)  # 열 제목 안 보이게
        table.resize(250, 180)
        qItem = QTableWidgetItem("Test")
        table.setItem(0, 0, qItem)

        # Button 생성
        btn = QPushButton("Button", self)
        btn.move(10, 300)
        btn.resize(100, 100)
        btn.clicked.connect(self.click)


    # 버튼이 클릭되면 Callback에 의해 호출됨
    def click(self):
        b = self.sender()
        print(b.text())


app = QApplication([])

label = MyApp()
label.show()

app.exec_()

 

하지만 이렇게 소스코드로 노가다 할 필요없이 Qt Designer로 편하게 UI 구성할 수 있다고 한다.

이는 다음 포스팅에서..

반응형