2012-11-16 129 views
-1

我想替換另一個小部件。我正在使用StackedWidget。我有以下幾點。無法更改內部StackedWidget小部件

首先,我註冊添加一些小部件的StackedWidget:

self.stackedWidget.addWidget(w1) 
    self.stackedWidget.addWidget(w2) 
    self.stackedWidget.addWidget(w3) 

的我綁定W1的按鈕點擊:

QObject.connect(w1.pushButton,SIGNAL("clicked()"),self.stackedWidget,SLOT(self.stackedWidget.setCurrentWidget(w2))) 

對於插槽我自己也嘗試 「setCurrentIndex」。我檢查了信號是否被接收,並沒有問題。

最後,我顯示w1。

self.stackedWidget.setCurrentWidget(w1) 

雖然「點擊()」被按下w1的按鈕時,接收到的信號,微件W2不會出現在StackedWidget。

UPDATE:

我做

QObject.connect(w1.pushButton,SIGNAL("clicked()"),self.stackedWidget,SLOT('w1Clicked()')) 

的建議;然而,我得到

Object::connect: No such slot QStackedWidget::w1Clicked() 
Object::connect: (sender name: 'pushButton') 
Object::connect: (receiver name: 'stackedWidget') 

我想我必須創建插槽「w1Clicked」不知何故,但我使用的設計師,我無法弄清楚。

我有一個主窗口StackedWidget和單獨的窗體與按鈕,所以我看不到如何進行連接或創建插槽。

另外,我發現,用這樣的問題,我是這樣做的:

QObject.connect(w1.pushButton,SIGNAL("clicked()"),self.stackedWidget,SLOT(self.stackedWidget.setCurrentWidget(w2))) 

是「self.stackedWidget.setCurrentWidget(W2)」被立即執行,不等待信號!這就是爲什麼W2從未被顯示。

我仍然不知道。

+0

您的文章似乎缺少一些東西... – PearsonArtPhoto

+0

謝謝,我完成了它。 –

+0

難道你會添加兩個w2小部件嗎? – PearsonArtPhoto

回答

2

您的connect呼叫是錯誤的。在建立連接時,您無法定義要將什麼值傳遞給您的插槽。相反,你需要爲你的願望,以創建自己的插槽和處理信號(道歉,如果我的Python語法是關閉的):

QObject.connect(w1.pushButton,SIGNAL("clicked()"),self,SLOT("w1Clicked()")) 

def w1Clicked(self): 
    self.stackedWidget.setCurrentWidget(w2) 
+0

謝謝。我已經讀過,必須創建一個C插槽作爲公共,但我不知道如何在Python中做到這一點。 –

0

最後,它的工作是這樣的:

w1.pushButton.clicked.connect(self.w1Clicked) 

至少信號被接收並且該方法被正確地調用。