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_()) |
반응형