[Pyqt5] 창 크기와 위젯 같이 움직이게 하기

반응형
    반응형

    해상도마다 달라지는 프로그램 크기

    Pyqt를 이용해 프로그램을 종종 만드는데요. 컴퓨터마다 해상도가 달라서 내 컴퓨터에는 괜찮게 나오는데 다른 컴퓨터에 적용시키면 창 크기가 달라지는 걸 볼 수 있습니다. 다만, 창 크기만 달라질 뿐 안에 있는 위젯의 크기는 달라지지 않습니다.

    해결방법

    코드로 하기

    직접 코딩으로 한다면 QgridLayout을 사용하면 됩니다.
    QgridLayout은 그리드 내에 있는 위젯을 확장 또는 축소하여 창의 크기에 맞게 배치하는 레이아웃 매니저로 창의 크기가 변경되면 위젯도 동적으로 크기가 조정되어 창의 크기게 맞게 정렬됩니다.

    다음 예제는 버튼 4개를 만들어 GridLayout을 적용한 예제입니다.

    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QGridLayout
    
    class MyWindow(QMainWindow):
        def __init__(self):
            super().__init__()
    
            self.setWindowTitle("GridLayout 예제")
            self.setGeometry(100, 100, 400, 300)
    
            central_widget = QWidget()
            self.setCentralWidget(central_widget)
    
            grid_layout = QGridLayout()
            central_widget.setLayout(grid_layout)
    
            button1 = QPushButton("버튼 1", self)
            button2 = QPushButton("버튼 2", self)
            button3 = QPushButton("버튼 3", self)
            button4 = QPushButton("버튼 4", self)
    
            grid_layout.addWidget(button1, 0, 0)
            grid_layout.addWidget(button2, 0, 1)
            grid_layout.addWidget(button3, 1, 0)
            grid_layout.addWidget(button4, 1, 1)
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = MyWindow()
        window.show()
        sys.exit(app.exec_())

    QgridLayout을 적용시키지 않으면 다음과 같이 됩니다.

     

    Qt designer를 사용한 방법

    Qt designer를 사용하면 간단하게 마칠 수 있습니다.
    해당 창에 오른쪽 마우스 클릭 - 배치 - 격자형으로 배치를 선택하시면 됩니다.

    폼 레이아웃으로 배치

    격자형 말고도 폼 레이아웃으로도 할 수 있는데 배치가 약간 달라집니다.

    위 그림처럼 위에서부터 배치를 시작합니다.

    둘의 차이를 보면 다음과 같습니다.

    폼 레이아웃 격자 레이아웃
    위젯을 수직으로 놓아 행(row)의 형태로 배치 위젯을 행(row)과 열(column)의 격자로 배치
    각 위젯은 자체 행(row)을 가지며, 각 행은 하나의 라벨과 하나의 입력 필드로 구성 각 위젯은 특정 행과 열에 배치되며, 여러 위젯을 격자 내에 정렬하여 복잡한 레이아웃을 구성
    주로 입력 양식과 관련된 위젯을 배치하는 데 사용 주로 여러 위젯을 복잡한 형태로 배치하거나 그리드 형태로 데이터를 표시할 때 사용
    위젯이 세로로 배치되어 읽기 흐름과 일치하며 사용자 인터페이스 설계에서 좋은 가독성을 제공 위젯의 배치를 좀 더 유연하게 제어할 수 있음

     

    마치며

    Pyqt는 정말 기능이 많은데 제가 책에서 배운다해도 한정될 수밖에 없습니다. Pyqt의 기능을 책에 다 담아내기가 어렵고 문서를 찾으려고 해도 함수이름으로 나열돼 있어 내가 원하는 기능을 찾기가 너무 어렵습니다. 이렇게 알게 될 때마다 정리를 해야함을 다시 한번 느끼네요.혹시 어디서 헤매고 계셨다면 이글이 도움이 되었으면 좋겠습니다.

     

    함께 보면 좋은 글

    [PyQt5] Qt Designer로 GUI 틀 만들고 py파일로 바꾸기

    [Pyqt5] 파일,폴더 선택 창 나오게 하기

    댓글

    Designed by JB FACTORY

    ....