2014-02-06 1 views
1

3 classes으로 구성된 코드가 있습니다. widget1widget2 클래스는 QFrame 클래스를 상속하며 사용자가 정보를 입력하기 위해 여러 개의 lineeditcombobox으로 구성됩니다.Python PyQt4에서 기존 MainWidnow의 중앙 위젯을 설정하는 방법은 무엇입니까?

그래서 내가 원하는 것은 : 프로그램이 시작될 때 widget1central widget으로 설정하여 QMainWindow 클래스를 먼저 가져옵니다.

widget1에는 버튼이 연결된 Check function이 있습니다. 확인 단추는 페이지에서 사용자가 입력 한 데이터를 기반으로 조건이 true인지 여부를 확인합니다.

조건에 해당하는 경우. widget2central wigetMainWindow으로 설정되어 기존 central widget, widget1을 대체하려고합니다.

제 질문은 기존 MainWidnow 클래스 인스턴스의 중앙 위젯으로 widget2을 어떻게 설정합니까? ,

def Check(self): 
    if (condition): 
     self.parent().setMyCentral(widget2) 

이제 : 다음 widget1

class MainWindow(QtGui.QMainWindow): 
    def __init__(self,parent = None): 
     QtGui.QMainWindow.__init__(self,parent) 
     .... 
     self.setMyCentral(widget1) 

    def setMyCentral(self, widgetClass): 
     mywidget = widgetClass(self) 
     self.setCentralWidget(mywidget) 

과 : 나는 MainWindow에 대해 다음 할 것

class widget1(QtGui.QFrame): 
    def __init__(self,parent = None): 
     ...... 
     ...... 

    def Check(self): 
     if (condition): 
      #set widget2 as central widget on MainWindow 

class widget2(QtGui.QFrame): 
    def __int__(self,parent = None): 
     ..... 
     ..... 

class MainWindow(QtGui.QMainWindow): 
    def __init__(self,parent = None): 
     QtGui.QMainWindow.__init__(self,parent) 
     .... 
     mywidgetone = widget1() 
     self.setCentralWidget(mywidgetone) 

if __name__ == '__main__': 
    app = QtGui.QApplicaiton(sys.argv) 
    main = MainWindow() 
    main.show() 
    app.exec_() 

답변

2

:

이 내 코드의 형식입니다 규칙을 따르십시오 : 수업은 대문자로 시작합니다 (, Widget2) 및 메소드는 (대신에 Check)

+0

부모 개체에 액세스 할 때'.parent()'함수를 사용할 수 있다는 것을 전혀 알지 못했습니다. 잘 알고 & 많이 고마워! –

0

다른 옵션은 패널에서 3 개의 위젯을 모두 작성하지만 widget2 및 3은 visible = false로 설정합니다. 그런 다음 변경할 시간이되면 widget1 visible = false로 설정하고 widget2는 표시되도록 설정합니다. 등등 패널을 중앙 위젯으로 설정하면 변경되지 않습니다. 패널은 세 명의 자녀 중 어떤 어린이가 표시할지 결정합니다.

관련 문제