Qt/PyQt5 강좌

pyQt5 윈도우를 화면의 중앙에 배치하기

webnautes 2024. 8. 19. 21:58
반응형

pyQt5 윈도우를 화면의 중앙에 배치하는 예제입니다.

두 개 이상의 모니터 사용시 주모니터의 정중앙에 보여집니다. 사용하는 UI 컴포넌트에 따라 정중앙에 배치안될 수도 있습니다. 



2024. 5. 22  최초작성

2024. 8 .19 버그 수정






import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit

class MyWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("PyQt5 Hello World Example")

        # 텍스트 에디트 위젯을 생성합니다.
        self.text_edit = QTextEdit(self)
        self.text_edit.setPlainText("Hello World")    # "Hello World" 출력

        # 텍스트 에디트를 중앙 위젯으로 설정합니다.
        self.setCentralWidget(self.text_edit)

        # 윈도우를 화면 정중앙에 배치합니다.
        self.adjustSize()  # 창의 크기를 자동으로 조정하여 내부에 포함된 모든 위젯이 잘 보이도록 합니다.
        qr = self.frameGeometry() # 창의 프레임(테두리 포함)과 관련된 지오메트리 정보를 반환합니다. qr에는 창의 위치와 크기가 저장됩니다.
        cp = QApplication.primaryScreen().availableGeometry().center() # 주 화면의 사용 가능한 영역의 중앙 위치 좌표를 가져옵니다.
        qr.moveCenter(cp) # 창의 프레임 지오메트리의 중심을 지정된 좌표(`cp`)로 이동시킵니다. 이로써 창의 중심이 화면의 중앙에 위치하게 됩니다. qr을 옮겨봄으로써 윈도우가 이동할 위치에 대한 좌표를 미리 파악합니다.
        self.move(qr.topLeft()) # 창의 왼쪽 상단 코너를 지정된 좌표로 이동시킵니다. `qr.topLeft()`는 `qr` 지오메트리의 왼쪽 상단 코너 좌표를 반환합니다. 이를 통해 창의 중심이 화면의 중앙에 위치하게 됩니다.


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())





위 방법을 사용해도 중앙 정렬을 실패하는 경우가 있었습니다.

 



테스트에 사용한 코드입니다.



import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('중앙 정렬 실패 예제')
       
        # 중앙 위젯 생성
        central_widget = QWidget()
        central_widget.setFixedWidth(300)
        self.setCentralWidget(central_widget)
       
        # # 윈도우를 화면 정중앙에 배치합니다.
        # self.adjustSize()  # 창의 크기를 자동으로 조정하여 내부에 포함된 모든 위젯이 잘 보이도록 합니다.
        qr = self.frameGeometry() # 창의 프레임(테두리 포함)과 관련된 지오메트리 정보를 반환합니다. qr에는 창의 위치와 크기가 저장됩니다.
        cp = QApplication.primaryScreen().availableGeometry().center() # 주 화면의 사용 가능한 영역의 중앙 위치 좌표를 가져옵니다.
        qr.moveCenter(cp) # 창의 프레임 지오메트리의 중심을 지정된 좌표(`cp`)로 이동시킵니다. 이로써 창의 중심이 화면의 중앙에 위치하게 됩니다. qr을 옮겨봄으로써 윈도우가 이동할 위치에 대한 좌표를 미리 파악합니다.
        self.move(qr.topLeft()) # 창의 왼쪽 상단 코너를 지정된 좌표로 이동시킵니다. `qr.topLeft()`는 `qr` 지오메트리의 왼쪽 상단 코너 좌표를 반환합니다. 이를 통해 창의 중심이 화면의 중앙에 위치하게 됩니다.

        self.show()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())




타이머를 사용하여 중앙 정렬이 안되는 점을 해결해줍니다.

 



테스트에 사용한 코드입니다.

 

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget
from PyQt5.QtCore import QTimer

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('중앙 정렬 실패 예제')
       
        # 중앙 위젯 생성
        central_widget = QWidget()
        central_widget.setFixedWidth(300)
        self.setCentralWidget(central_widget)
       
        # 타이머를 사용하여 윈도우가 완전히 생성된 후 중앙 정렬
        QTimer.singleShot(0, self.centerWindow)

        self.show()


    def centerWindow(self):

        # # 윈도우를 화면 정중앙에 배치합니다.
        # self.adjustSize()  # 창의 크기를 자동으로 조정하여 내부에 포함된 모든 위젯이 잘 보이도록 합니다.
        qr = self.frameGeometry() # 창의 프레임(테두리 포함)과 관련된 지오메트리 정보를 반환합니다. qr에는 창의 위치와 크기가 저장됩니다.
        cp = QApplication.primaryScreen().availableGeometry().center() # 주 화면의 사용 가능한 영역의 중앙 위치 좌표를 가져옵니다.
        qr.moveCenter(cp) # 창의 프레임 지오메트리의 중심을 지정된 좌표(`cp`)로 이동시킵니다. 이로써 창의 중심이 화면의 중앙에 위치하게 됩니다. qr을 옮겨봄으로써 윈도우가 이동할 위치에 대한 좌표를 미리 파악합니다.
        self.move(qr.topLeft()) # 창의 왼쪽 상단 코너를 지정된 좌표로 이동시킵니다. `qr.topLeft()`는 `qr` 지오메트리의 왼쪽 상단 코너 좌표를 반환합니다. 이를 통해 창의 중심이 화면의 중앙에 위치하게 됩니다.



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainWindow()
    sys.exit(app.exec_())

 

반응형