반응형
파이썬 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("이벤트루프 실행 후")가 찍히게 된다.
몇 가지 위젯(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 구성할 수 있다고 한다.
이는 다음 포스팅에서..
반응형
'Programming > Python' 카테고리의 다른 글
파이썬 datetime으로 파일명 생성 (0) | 2020.12.20 |
---|---|
파이썬 comprehension, lambda, zip (0) | 2020.12.02 |
파이썬 requirement.txt로 pip 패키지 관리 (0) | 2020.11.29 |
파이썬 pickle 모듈 (0) | 2020.11.11 |
파이썬 알고리즘 명령어 팁 (0) | 2020.03.08 |