2017-11-25 3 views
1

PyQt5에서 간단한 응용 프로그램을 완성했습니다. QT 디자이너에서 UI를 디자인하고 pyuic5으로 py 코드로 변환하여 파이썬 인터프리터를 통해 실행했습니다.PyQt5 : 디자이너와 함께 여러보기를 만들고 하나의 응용 프로그램에 연결하십시오.

이제 PyQt5에 익숙하지 않지만 또 다른 UI보기를 추가하고 자습서의 대부분은 하나의보기 만 언급합니다. 예를 들어 Visual Studio를 사용하고 있다면 새 양식을 만들고 show and hide 메서드를 사용하여 표시 할 수 있습니다. 예를 들어 단추를 누르면 표시되지만 PyQt5에서도 동일한 방법을 모르겠습니다.

pyuic5에서 변환 된 코드는 인스턴스를 생성하고 앱을 실행하는 if __name__ == "__main__" 기능을 포함하므로 UI ​​데이터 만 가져 오는 것만으로도 충분합니다. 그리고 어떻게하면 뷰를 생성 할 수 있습니까? 필요에 따라 뷰를 표시하고 숨길 수 있습니까? 감사합니다

편집 ============= 로드가 다른 방법을 발견 한 이래로 조금 더졌습니다 UI 파일. PyQt에는 Python 코드로 변환하는 대신 UI 파일을 직접로드 할 수있는 메서드가 있다고 가정합니다. 이는 내가 사용하고있는 윈도우 유형의 서브 클래스 인 클래스를 만들 수 있다는 것을 의미하며 (예 : QApplication, QMainWindow, QWidget 등등), Visual Studio에서 폼 인 것처럼 해당 객체에 액세스 할 수 있습니다.

from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow 
from PyQt5.uic import loadUI 

class UIObject(QMainWindow): 

    def __init__(self): 
     super(UIObject, self).__init__() 
     loadUI('mainapp.ui`, self) 
     self.mybutton1.clicked.connect(self.printhello) 

    def printhello(): 
     print("hello") 

app = QApplication(sys.argv) 
mainview = UIObject() 
mainview.show() 
sys.exit(app.exec_()) 

이렇게하면 UI 파일이로드되어 화면에 표시됩니다. 여러개의 ui 파일을로드하고 보여 주거나 비주얼 스튜디오에서 숨기기 위해 동일한 구조를 사용할 수 있다고 가정합니다. 똑바로 보이지만 QT 또는 PyQT에 대해 많이 알지 못해서, 왜이 방법으로 ui 파일을 다루는 것이 더 일반적으로 자습서에 광고되지는 않습니까? 우연히도 문서를 읽는 동안 그것을 발견했습니다.

답변

0

다른 포럼의 다양한 답변과 게시물을 섞어서 해결책을 찾았습니다.

첫 번째 클래스를 QMainWindow으로 만들고 __init__에서 loadUi을 사용하여 QT 디자이너 파일을로드합니다. 그런 다음 두 번째 형식 /보기를 보유하는 두 번째 클래스를 만들고 __init__에서 상위 뷰 (첫 번째 클래스 또는 기타 필요한 것)를 매개 변수로 전달합니다. 버튼을 클릭하면 기본보기를 숨기고 두 번째보기를 표시 할 수 있습니다. 보조보기를 닫으면 이전보기가 다시 표시됩니다.

원하는만큼 많은 창을 추가 할 수 있습니다. 트릭은 항상 각각의 부모를 전달하고 적절하게 표시/숨기기를 기억하는 것입니다. Visual Studio 양식보다 훨씬 복잡하지만 실행 가능합니다.

class FirstForm(QMainWindow): 

    def __init__(self): 
     super(FirstForm, self).__init__() 
     loadUi('firstform.ui', self) 
     self.button1.clicked.connect(self.openOtherForm) 

    def openOtherForm(self): 
     self.hide() 
     otherview = SecondForm(self) 
     otherview.show() 

class SecondForm(QDialog): 

    def __init__(self, parent=None): 
     super(SecondForm, self).__init__(parent) 
     loadUi('secondform.ui', self) 
     self.button2.clicked.connect(self.goBackToOtherForm) 

    def openOtherForm(self): 
     self.parent().show() 
     self.close() 

app = QApplication(sys.argv) 
main = FirstForm() 
main.show() 
sys.exit(app.exec_()) 
관련 문제