본문 바로가기
  • ▒ 네모의 쉽게 배우는 네트워크 | 개발 ▒
파이썬 개발/Qypt5

PyQt5 - 메인 윈도우에서 다른 윈도우 열기

by 너l모 2022. 8. 3.
반응형

※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!


 ο 목차

     


    ※ 코드 보는 방법 참고

    ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력

    ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력

    ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력

    ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력


    잊어버릴까봐 유레카 했을 때 후딱 쓰는 포스팅 :)

     

    메인 윈도우에서 버튼 클릭시 다른 윈도우 오픈 -> 다른 윈도우에서 버튼 클릭시 메인 윈도우로 복귀하는 GUI 코드 구현

     

    1.코드 개요 

    1) 메인 윈도우(클래스)

    - Push 버튼 추가

    - Push 버튼 누를 시 서브 윈도우를 호출하고 서브 윈도우의 Push 버튼 누를시 메인 윈도우로 복귀하는 슬롯 추가

     

    2) 서브 윈도우(클래스)

    - Push 버튼 추가

    - Push 버튼 누를시 서브 윈도우를 종료하는 슬롯 추가

     

    2. 메인 윈도우 클래스 코드

    < 코드 참고 >

    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self):
            super(MainWindow, self).__init__()
            self.resize(400, 300)                           // 윈도우 사이즈 조정
            self.button = QtWidgets.QPushButton(self)       // 푸시버튼 추가
            self.button.setGeometry(0, 0, 400, 300)         // 푸시버튼 위치 지정
            self.button.setText('Open Sub Window')          // 푸시버튼 텍스트 지정
            self.button.setStyleSheet('font-size:40px')     // 푸시버튼 텍스트 폰트 사이즈 조정
            self.button.clicked.connect(self.sub_show)      // 푸시버튼 클릭 시그널 발생시 sub_show 슬롯으로 연결
            
         def sub_show(self):
            self.hide()                                             // 메인 윈도우 숨기기
            self.sub_window = SubWindow()                           // 서브윈도우 인스턴스 생성
            self.sub_window.button2.clicked.connect(self.show)      // 서브윈도우 버튼 클릭시 메인 윈도우로 복귀
            self.sub_window.show()                                  // 서브 윈도우 호출

     

    3. 서브 윈도우 클래스 코드

    < 코드 참고 >

    class SubWindow(QtWidgets.QWidget):
        def __init__(self):
            super(SubWindow, self).__init__()
            self.resize(400, 300)
            self.button2 = QtWidgets.QPushButton(self)          // 서브 윈도우 푸시버튼 생성
            self.button2.setGeometry(0, 0, 400, 300)            // 서브 윈도우 푸시버튼 위치 조정
            self.button2.setText('Back to Main window')         // 서브 윈도우 푸시버튼 텍스트 지정
            self.button2.setStyleSheet('font-size:40px')        // 서브 윈도우 푸시버튼 텍스트 사이즈 조정
            self.button2.clicked.connect(self.close)            // 서브 윈도우 푸시버튼 클릭시 close 슬롯과 연결

     

    4. 전체 코드

    < 코드 참고 >

    from PyQt5 import QtWidgets
    import sys
    
    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self):
            super(MainWindow, self).__init__()
            self.resize(400, 300)
    		
            self.button = QtWidgets.QPushButton(self)
            self.button.setGeometry(0, 0, 400, 300)
            self.button.setText('Open Sub Window')
            self.button.setStyleSheet('font-size:40px')
            self.button.clicked.connect(self.sub_show)
    
        def sub_show(self):
            self.hide()
            self.sub_window = SubWindow()
            self.sub_window.button2.clicked.connect(self.show)
            self.sub_window.show()
    
    class SubWindow(QtWidgets.QWidget):
        def __init__(self):
            super(SubWindow, self).__init__()
            self.resize(400, 300)
    		
            self.button2 = QtWidgets.QPushButton(self)
            self.button2.setGeometry(0, 0, 400, 300)
            self.button2.setText('Back to Main window')
            self.button2.setStyleSheet('font-size:40px')
    		
            self.button2.clicked.connect(self.close)
    
    if __name__ == "__main__" :
        app = QtWidgets.QApplication([])
        mw = MainWindow()
        mw.show()
        sys.exit(app.exec())

     

    메인, 서브 각각의 클래스는 구현했지만 두개의 클래스를 기능적으로 이어붙이는 부분에서 고민이 많았는데

    StackOverFlow 고수님들의 답변을 참고해서 코드 수정할 수 있었습니다. 

     

    테스트 용으로 지금은 메인 윈도우와 서브 윈도우 안에 푸시버튼만 구현해 놓았지만 동일 메커니즘을 이용하면 여러 윈도우 사이를 이동하는 부분에도 큰 어려움이 없을 거라 생각합니다~

     

    혹시 코드 관련해서 기타 문의 사항 있으시면 댓글 남겨주세요 :)

    감사합니다.

     

     


    ※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다. 

    반응형

    댓글