[Python GUI] 파이썬 푸시버튼(QPushButton) 및 레이블(QLabel) 위젯 사용방법
버튼을 클릭했을 때 이벤트 처리하는 방법에 대해 알아봅니다. 이벤트 처리 결과를 레이블에 출력해보도록 합니다. 작업 순서는 화면UI를 구성 후 PyQ5라이브러리를 사용하여 UI와 코드를 연결해줍니다.
Qt 디자이너 툴을 사용하여 아래와 같이 라벨(레이블) 하나와 두개의 버튼을 생성하였습니다. 왼쪽 마우스를 클릭한 상태로 다이얼로그 레이아웃 창에 끌어다 놓으면 됩니다. 이런 위젯들의 위치는 변경이 가능합니다. 필요한 위젯을 먼저 끌어다 놓아도 됩니다.
다음 코드 스니펫은 버튼을 클릭했을 때 이벤트 처리를 위한 메서드(함수)를 만들어 주었습니다. 하나는 쓰기 버튼이고 다른 하나는 지우기 버튼입니다. 쓰기 버튼을 클릭했을 때 액션으로 텍스트를 라벨(Label)에 표시되도록 처리하였습니다. 지우기 버튼을 클릭했을때는 라벨의 문자열 모두 삭제합니다.
QLabel 사용시 자주 사용하는 함수(메서드)
- .text()메서드는 레이블(라벨)에 쓰여있는 문자를 가져옵니다.
- .setText()메서드는 Label에 표시할 문자를 변경할때 사용합니다.
- .clear()메서드는 라벨에 문자열을 지울때 사용합니다.
def btn1Clicked(self):
print("버튼이 눌렸습니다.")
str1 = "버튼이 눌렸습니다.n" + self.log_label.text()
self.log_label.setText(str1)
def btn2Clicked(self):
print("지우기 버튼이 눌렸습니다.텍스트박스의 내용을 지웁니다.")
self.log_label.clear()
다음 작업으로 버튼에 위에서 생성한 이벤트 함수를 연결해주어야합니다.
아래 코드 스니펫에서 보는 바와 같이 self.버튼이름.clicked.connect()메서드를 사용하여 할당하며, 생성자를 선언한 블럭에서 코드를 처리해줍니다.
# 버튼과 버튼을 클릭했을때 이벤트를 연결해준다.
self.btn1.clicked.connect(self.btn1Clicked)
self.btn2.clicked.connect(self.btn2Clicked)
전체 스크립트는 아래와 같습니다.
from PyQt5 import uic
from PyQt5.QtWidgets import QApplication, QMainWindow
formclass = uic.loadUiType("gui_button_test.ui")[0]
class TestWindow(QMainWindow, formclass):
def __init__(self):
super().__init__()
self.setupUi(self)
# 버튼과 버튼을 클릭했을때 이벤트를 연결해준다.
self.btn1.clicked.connect(self.btn1Clicked)
self.btn2.clicked.connect(self.btn2Clicked)
def btn1Clicked(self):
print("버튼이 눌렸습니다.")
str1 = "버튼이 눌렸습니다.n" + self.log_label.text()
self.log_label.setText(str1)
def btn2Clicked(self):
print("지우기 버튼이 눌렸습니다.텍스트박스의 내용을 지웁니다.")
self.log_label.clear()
if __name__ == "__main__":
applicaiotn = QApplication([])
windoss = TestWindow()
windoss.show()
applicaiotn.exec_()
[화면UI XML : gui_button_test.ui]
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>482</width>
<height>417</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<widget class="QPushButton" name="btn1">
<property name="geometry">
<rect>
<x>290</x>
<y>30</y>
<width>100</width>
<height>40</height>
</rect>
</property>
<property name="text">
<string>쓰기</string>
</property>
</widget>
<widget class="QLabel" name="log_label">
<property name="geometry">
<rect>
<x>20</x>
<y>30</y>
<width>241</width>
<height>111</height>
</rect>
</property>
<property name="text">
<string>로그창</string>
</property>
</widget>
<widget class="QPushButton" name="btn2">
<property name="geometry">
<rect>
<x>290</x>
<y>100</y>
<width>101</width>
<height>51</height>
</rect>
</property>
<property name="text">
<string>지우기</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
[실행결과]
[REFERENCE]
build-system.fman.io/pyqt5-tutorial
[연관 글 더보기]