https://www.youtube.com/watch?v=U_vWfzhWINw
PyQt를 이용한 GUI 만들기 첫 시간입니다.
GUI에서 가장 많이 사용하는 위젯인
Label : 가장 간단하게 Text를 출력하는 위젯
PushButton : 버튼 위젯
ComboBox : 여러 목록 중 하나를 선택할 수 있는 위젯
CheckBox : 체크, 언체크를 선택할 수 있는 위젯
RadioButton : 여러 목록 중 하나를 선택할 수 있는 위젯
SpinBox : 정수를 쉽게 입력 할 수 있는 위젯
DateEdit : 날짜를 입력 하는 위젯
TimeEdit : 시간을 입력하는 위젯
ListWidget : 리스트의 원소를 출력하는 위젯
을 한 번씩 만들어 보는 가장 간단한 GUI프로그램을 생성합니다.
import sys
from PyQt5.QtWidgets import *
class Main(QDialog):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
layout = QVBoxLayout()
label_widget = QLabel("Hello World!")
button_widget = QPushButton("Click Me")
combobox_widget = QComboBox()
combobox_widget.addItem("Python")
combobox_widget.addItem("C")
combobox_widget.addItem("C++")
combobox_widget.addItem("Fortran")
combobox_widget.addItem("Basic")
check_box_widget_summer = QCheckBox("Summer")
check_box_widget_winter = QCheckBox("Winter")
radio_button_widget_male = QRadioButton("Male")
radio_button_widget_female = QRadioButton("Female")
spinbox_widget = QSpinBox()
date_widget = QDateEdit()
time_widget = QTimeEdit()
list_widget = QListWidget()
item_1 = QListWidgetItem("Cat")
item_2 = QListWidgetItem("Dog")
list_widget.addItem(item_1)
list_widget.addItem(item_2)
layout.addWidget(label_widget)
layout.addWidget(button_widget)
layout.addWidget(combobox_widget)
layout.addWidget(check_box_widget_summer)
layout.addWidget(check_box_widget_winter)
layout.addWidget(radio_button_widget_male)
layout.addWidget(radio_button_widget_female)
layout.addWidget(spinbox_widget)
layout.addWidget(date_widget)
layout.addWidget(time_widget)
layout.addWidget(list_widget)
self.setLayout(layout)
self.resize(1000, 500)
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Main()
sys.exit(app.exec_())
위 코드를 실행하면, 다음과 같이 위젯들을 출력하는 기본 GUI 창이 생성 됩니다.
위 프로그램에는 특별한 기능은 없고, 단지 자주 사용하는 위젯을 어떻게 생성하고 메인 UI에 배치할 수 있는가를 보여줍니다.
위 코드의 각 부분을 하나 하나 설명하면 다음과 같습니다.
import sys
from PyQt5.QtWidgets import * # PyQt5의 위젯을 불러 옵니다.
# 프로그램에서 사용하는 위젯을 하나 하나 불러 오기
# 귀찮기 때문에 모든 위젯을 불러 옵니다.
class Main(QDialog): # 메인 클래스를 생성합니다. QDialog를 상속 받습니다.
def __init__(self): # QDialog는 아주 기본적인 Dialog중 하나 입니다.
super().__init__()
self.init_ui() # init_ui 메소드에서 모든 작업을 합니다.
PyQt에서는 QWidget, QDialog, QWindow등의 기본 Dialog창을 선택할 수 있습니다. 그 중에서 QDialog는 가장 간단한 Dialog중 하나 입니다. 좀 더 복잡하고 다양한 기능이 있는 UI를 생성하기 위해서는 QWindow를 사용하는 편이 좋습니다.
def init_ui(self):
layout = QVBoxLayout() # Vertical Box Layout을 생성합니다.
### 이곳에서 위젯을 생성하고, 생성한 위젯을 layout에 추가합니다 ###
self.setLayout(layout) # layout을 QDialog의 layout으로 set 합니다.
self.resize(1000, 500) # 창의 기본 크기를 1000px * 500px 로 설정합니다.
self.show() # QDialog를 화면에 띄웁니다.
이 코드의 대부분의 내용은 init_ui 메소드에 정의 돼 있습니다.
init_ui 메소드에서는 QVBoxLayout인 layout을 생성하고, layout에 다양한 위젯을 배치하고, 이 layout을 QDialog의 layout으로 설정(setLayout)하게 됩니다.
QVBoxLayout은 PyQt의 레이아웃 중 하나로, 위젯들을 위에서 부터 아래로, 즉 Veritcal 한 방향으로, 배치하는 레이아웃 입니다. 가장 많이 사용되는 레이아웃 중 하나 입니다.
resize(크기, 크기)를 통해서 창의 기본 크기를 설정하고, show()를 호출하여 QDialog창을 띄웁니다.
label_widget = QLabel("Hello World!") #Label 위젯을 생성하고 "Hello World"로 정의합니다.
button_widget = QPushButton("Click Me") # "Click Me"라는 이름의 버튼을 생성합니다.
combobox_widget = QComboBox() # 체크 박스를 생성합니다.
combobox_widget.addItem("Python") #체크 박스에 "Python" 이름의 아이템을 추가 합니다.
combobox_widget.addItem("C")
combobox_widget.addItem("C++")
combobox_widget.addItem("Fortran")
combobox_widget.addItem("Basic")
check_box_widget_summer = QCheckBox("Summer") # "Summer" 이름의 체크박스를 생성합니다.
check_box_widget_winter = QCheckBox("Winter")
radio_button_widget_male = QRadioButton("Male") # "Male"를 선택하는 라디오 버튼을 생성합니다.
radio_button_widget_female = QRadioButton("Female")
spinbox_widget = QSpinBox() # 스핀박스를 생성합니다.
date_widget = QDateEdit() # 데이트 에딧을 생성합니다.
time_widget = QTimeEdit() # 타임 에딧을 생성합니다.
list_widget = QListWidget() # 리스트 위젯을 생성합니다.
item_1 = QListWidgetItem("Cat") #리스트 위젯에 "Cat" 이라는 아이템을 추가합니다.
item_2 = QListWidgetItem("Dog")
list_widget.addItem(item_1)
list_widget.addItem(item_2)
layout.addWidget(label_widget) #layout 레이아웃에 label_widget을 추가 합니다.
layout.addWidget(button_widget)
layout.addWidget(combobox_widget)
layout.addWidget(check_box_widget_summer)
layout.addWidget(check_box_widget_winter)
layout.addWidget(radio_button_widget_male)
layout.addWidget(radio_button_widget_female)
layout.addWidget(spinbox_widget)
layout.addWidget(date_widget)
layout.addWidget(time_widget)
layout.addWidget(list_widget)
위 부분은 필요한 위젯을 하나하나 만들고, 이 위젯을 미리 만들어둔 layout 레이아웃에 추가하는 부분입니다.
각 위젯은 위젯의 용도에 맞게 생성할 수 있습니다. 위젯이 모두 생성 되었다면, layout.addWidget(위젯)를 통해서 각 위젯을 layout 레이아웃에 추가 합니다. 추가한 순서대로 위에서 아래로 위젯이 배치됩니다.
'PyQt GUI' 카테고리의 다른 글
PyQt GUI (6) : GUI창의 크기에 따라 위젯의 크기가 자동으로 커지게 하기 (1) | 2021.08.05 |
---|---|
PyQt GUI (5) 어플리케이션 만들기 (1) : 100줄만에 계산기 만들기 (1) | 2021.08.04 |
PyQt GUI (4) : 위젯 이벤트 연결 (버튼 클릭 시 반응 하게 하기) - clicked.conncet() (0) | 2021.08.04 |
PyQt GUI (3) : QFormLayout을 이용한 위젯 배치 (0) | 2021.08.04 |
PyQt GUI (2) : 레이아웃을 이용한 위젯 배치 - QVBoxLayout, QHBoxLayout, QGridLayout 사용법 (0) | 2021.08.03 |