PyQt에서 QDialog, QMainWindow, QWidget의 모달(Modal), 모달리스(Modaless) 관련 질문드립니다.

조회수 1257회

안녕하세요. 현재 Laspbian OS 환경에서 python으로 프로그램 개발을 진행하고 있습니다.

개발하려고 하는 프로그램은 메인 다이얼로그 폼과 서브 다이얼로그 폼이 존재합니다. 현재 프로그램 구성 중에 한 부분이 해결이 되지 않고 있어서 질문드립니다.

우선, 요약질문 : 메인 프로그램이 여러 라이브러리를 호출하고 connect를 하면서 완료되는데까지 Delay가 있습니다. 그래서, 현재 어디까지 초기화가 끝났고 프로그레스바가 100%가 되면 해당 다이얼로그 창은 닫고, 메인 창을 show()하려고 합니다.

예를들어, (A)메인 다이얼로그[메인 프로세스], (B)서브 다이얼로그[로그인], (C)서브 다이얼로그[초기화 상태]가 존재하고

Class (A)메인 다이얼로그: Init ... 부분에 (B)서브 다이얼로그[로그인] 클래스를 호출하여 로그인이 성공하면 다음 로직으로 진행됩니다.

만약 (B)서브 다이얼로그[로그인]이 close가 리턴되지 않으면 다음 순서를 진행하지 않습니다. 이유는 모달(Modal)이라서 라는 것을 이해하고 있습니다.

다음 부분에서 막혔습니다. (B)서브 다이얼로그[로그인] 로그인이 성공하면 해당 다이얼로그를 Close를 하고 메인 프로그램이 여러 라이브러리를 호출하고 connect를 하기 때문에 show가 완료 되기 전까지 딜레이가 지연되어서, 프로그레스바가 포함되어 있는 새로운 [C]서브 다이얼로그로 진행창을 만들려고합니다.

Class (A)의 Init 내부에 [C]서브 다이얼로그를 생성하여 했지만, [C]서브 다이얼로그 창이 표출되나, 멈춘 것처럼 바탕이 투명으로 나옵니다..

즉, 현재어느 부분을 잘못 접근하고 있는지 알려주시면 감사하겠습니다.

해당 관련 소스는 아래 순서처럼 되어 있습니다.

  1. Class (A)메인 다이얼로그:
  2. Init
  3. (B)서브 다이얼로그[로그인] -> 로그인 성공이면 close
  4. (C)서브 다이얼로그 시작 -> 프로그램 초기화 = 프로그레스바 100%가 되면 hide() 혹은 close()
  5. 최종 (A)메인 다이얼로그 show()

if name == 'main': app = QApplication(sys.argv) app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) main_dialog = MainDialog() main_dialog.setWindowFlags(Qt.Window | Qt.FramelessWindowHint) main_dialog.setWindowModality(Qt.NonModal) main_dialog.show() app.exec_()

(C)서브 다이얼로그[로그인 창]

  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)