투케이2K

143. (python/파이썬) [Mac Os] : [PyQt5] : QHBoxLayout, QVBoxLayout 사용해 수평 및 수직 박스 레이아웃 정렬 수행 본문

Python

143. (python/파이썬) [Mac Os] : [PyQt5] : QHBoxLayout, QVBoxLayout 사용해 수평 및 수직 박스 레이아웃 정렬 수행

투케이2K 2024. 5. 22. 19:35

[개발 환경 설정]

개발 툴 : VsCode

개발 언어 : python

 

[소스 코드]

# --------------------------------------------------------------
# [import]
# --------------------------------------------------------------
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
# --------------------------------------------------------------



# --------------------------------------------------------------
# [요약 설명]
# --------------------------------------------------------------
# 1. PyQt 파이썬에서 GUI 프로그램을 만들 때 사용되는 모듈입니다
# --------------------------------------------------------------
# 2. PyQt5 를 이용한 모든 프로그램은 반드시 QApplication 객체를 생성해야합니다
# --------------------------------------------------------------
# 3. QApplication 객체의 exec_ 메소드를 호출하여 이벤트 루프를 시작합니다
# - 사용자가 마우스클 클릭하거나 키보드를 입력하는 것과 같은 동작 처리
# --------------------------------------------------------------
# 4. show 메소드를 호출해 화면에 윈도우 창을 표시하게 합니다
# --------------------------------------------------------------
# 5. 모듈 설치 참고 사이트 : https://blog.naver.com/kkh0977/223450546166
# --------------------------------------------------------------



# --------------------------------------------------------------
# [GUI Form Class]
# --------------------------------------------------------------
class MyWindow(QMainWindow):
    def __init__(self): # [클래스 생성자 초기화]
        super().__init__()
        self.setWindowTitle("Centering Frame") # [타이틀 지정]
        self.center() # [GUI 창 중앙 정렬]

        # ---------------------------------------
        # [박스 레이아웃 이란 ?]
        # ---------------------------------------
        # 1. QHBoxLayout, QVBoxLayout 은 여러 위젯을 수평, 수직으로 정렬하는 레이아웃 클래스 입니다
        # 2. QHBoxLayout, QVBoxLayout 생성자는 수평, 수직의 박스를 하나 만드는데, 다른 레이아웃 박스를 넣을 수도 있고 위젯을 배치할 수도 있습니다
        # ---------------------------------------

        # [두개 버튼 생성]
        okButton = QPushButton('OK')
        cancelButton = QPushButton('Cancel')


        # [QHBoxLayout 생성] : [수평 박스] : [ㅁ:okButton:cancelButton:ㅁ] 형태
        h_layout = QHBoxLayout()
        h_layout.addStretch(1) # 빈 공간 추가
        h_layout.addWidget(okButton) # 버튼 추가
        h_layout.addWidget(cancelButton) # 버튼 추가
        h_layout.addStretch(1) # 빈 공간 추가


        # [QVBoxLayout 생성] : [수직 박스]
        # |==================|
        # |==================|
        # |==================|
        # |QHBoxLayout       |
        # |==================|
        v_layout = QVBoxLayout()
        v_layout.addStretch(3) # 빈 공간 추가
        v_layout.addLayout(h_layout) # 레이아웃 추가
        v_layout.addStretch(1) # 빈 공간 추가


        # [레이아웃을 GUI 프레임에 추가]
        wid = QWidget(self)
        self.setCentralWidget(wid)
        wid.setLayout(v_layout)

    # ---------------------------------------------------------

    def center(self): # [GUI 창 중앙 정렬 표시] 
        self.resize(500, 500) # [가로, 세로 사이즈 지정]

        # [GUI 프레임창 화면 가운데 정렬 실시]
        qr = self.frameGeometry() # [창의 위치와 크기 정보를 가져옵니다]
        cp = QDesktopWidget().availableGeometry().center() # [사용하는 모니터 화면의 가운데 위치를 파악합니다]
        qr.moveCenter(cp) # [창의 직사각형 위치를 화면의 중심의 위치로 이동합니다]
        self.move(qr.topLeft()) # [현재 창을, 화면의 중심으로 이동했던 직사각형(qr)의 위치로 이동시킵니다]



# --------------------------------------------------------------
# [main start]
# --------------------------------------------------------------


# [QApplication 정의]
app = QApplication(sys.argv)


# [프로그램 표시 수행]
win = MyWindow()
win.show()


# [이벤트 처리]
app.exec_()


# --------------------------------------------------------------
# [main end]
# --------------------------------------------------------------
 

[결과 출력]

 

 

반응형
Comments