2014-03-12 1 views
2

나는 QWidget을 기반으로 PyQt로 애플리케이션을 개발 중이다. 내 전체 응용 프로그램을 클래스 (예 : "Example") 안에 넣었습니다. 이 응용 프로그램 안에 QtDesigner에서 디자인 한 다른 QWidget 창 ("Report Widget")을 호출하는 단추가 있습니다. 문제는이 작업을 수행하는 방법을 모른다는 것입니다. 다음은 내가 사용하는 방법입니다 (인터넷에서 찾은 것에서 오는 것입니다).PyQt의 다른 QWidget에서 QWidget을 호출하는 방법

def ShowReportWidget(self): 
    self.f = QtGui.QWidget() 
    self.ReportWidget = ReportWidget(self.f) 
    self.ReportWidget.show() 
:

ReportBtn = QtGui.QPushButton("Generate report") 
ReportBtn.clicked.connect(self.ShowReportWidget) 

두 번째 줄은 예 (주) 클래스의 ShowReportWidget 메소드를 호출 : 내 메인 클래스 "예"에 는 방법은 "보고서 위젯"에 대한 호출 버튼을 정의

class ReportWidget(QtGui.QWidget): 
def __init__(self, parent = None): 
    QtGui.QWidget.__init__(self) 
    self.ui = rw.Ui_ReportWidget() 
    self.ui.setupUi(parent) 

결국,이 클래스는 외부 클래스를 말한다 (Ui_ReportWidg :

이 메소드는 클래스 예 (주) 클래스에서 클래스이다 ReportWidget를 호출 et), 다른 별도의 파이썬 파일 (QtDesigner .ui 파일에서 생성 된 파일)에 포함되어 있는데, 이는 스크립트 시작 부분에서 rw로 가져옵니다.

문제는이 방법으로 보고서 위젯 버튼을 클릭하면 새 창이 뜨지만 비어 있습니다. Ui_ReportWidget 클래스의 내용이로드되지 않습니다.

제 질문이 충분히 분명하기를 바랍니다. 초기화하기() 함수 호출 부모 QObject를 소요하면서

답변

3

SetupUi

덕분 입력으로는 QWidget 걸린다.

def ShowReportWidget(self): 
    self.f = QtGui.QWidget() 
    self.ReportWidget = ReportWidget(self) 
    self.ReportWidget.setupUi(self.f) 
    self.f.exec_() 

class ReportWidget(QtGui.QWidget): 
    def __init__(self, parent = None): 
     QtGui.QWidget.__init__(self,parent) 

    def setupUi(self,Widget): 
     self.ui = rw.Ui_ReportWidget() 
     self.ui.setupUi(Widget) 
+1

감사합니다. 그게 효과가 있지만 self.f.exec_() 대신에 self.f.show()를 끝내는 것만으로. 나는 모든 것을 이해했다고 100 % 확신하지는 않는다 ... –

관련 문제