※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :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 고수님들의 답변을 참고해서 코드 수정할 수 있었습니다.
테스트 용으로 지금은 메인 윈도우와 서브 윈도우 안에 푸시버튼만 구현해 놓았지만 동일 메커니즘을 이용하면 여러 윈도우 사이를 이동하는 부분에도 큰 어려움이 없을 거라 생각합니다~
혹시 코드 관련해서 기타 문의 사항 있으시면 댓글 남겨주세요 :)
감사합니다.
※ 좋아요와 구독은 큰 힘이 됩니다. 감사합니다.
'파이썬 개발 > Qypt5' 카테고리의 다른 글
Pyqt5 - gui 멈춤, gui freezing 해소, QThread 사용, multithreading, Long-running task offloading (0) | 2022.09.08 |
---|---|
PyQt5 - QFileDialog.getOpenFileName 파일 선택후 파일명 가져와서 라인 에디터에 입력하기 (0) | 2022.08.09 |
PyQt5 - QLabel(레이블) 글자 잘림 현상 해결 (0) | 2022.08.08 |
PyQt5 - 어플리케이션, 위젯, 윈도우, 이벤트 루프에 대해서 (0) | 2022.08.03 |
PyQt5 - RadioButton 누르면 라벨(Label) 출력하기 (0) | 2022.06.08 |
댓글