2014-02-06 12 views
1

我有一個代碼,它由3 classes組成。類widget1widget2繼承自QFrame類,並且由用戶輸入信息的幾個lineeditcombobox組成。如何在Python PyQt4中設置現有MainWidnow的中心部件?

所以,我想要的是:程序啓動時,首先會彈出QMainWindow類,其中widget1設置爲central widget

widget1有一個Check function連接到它上面的一個按鈕。檢查按鈕將根據用戶在頁面上輸入的數據檢查條件是否爲真。

如果條件成立。我希望widget2將其設置爲MainWindowcentral wiget以取代現有的central widget,widget1

我的問題是,我如何將widget2設置爲現有MainWidnow類實例的中心控件?

這是我的代碼的格式:

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

我做了MainWindow如下:

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) 

,然後在widget1

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

現在,請遵循以下慣例:課程以大寫字母開頭(Widget1Widget2)和方法沒有(check而不是Check

+0

我從來不知道我可以使用'.parent()'fucntion來訪問父對象。很高興知道&非常感謝! –

0

另一個選項是面板創建所有3個小部件,但設置widget2和3 visible = false。然後,當時間改變,設置widget1可見= false,並且widget2可見。等等。您將面板設置爲中央控件,這永遠不會改變。專家小組決定要展示三個孩子中的哪一個。

相關問題