无法在StackedWidget中更改小部件

时间:2012-11-16 01:03:31

标签: python qt widget pyqt

我正在尝试将小部件替换为另一个。我正在使用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)))

对于Slot我也试过“setCurrentIndex”。我检查了信号是否正在接收,并且没问题。

最后,我展示了w1。

self.stackedWidget.setCurrentWidget(w1)

虽然按下w1的按钮时收到“clicked()”信号,但是小部件w2永远不会出现在StackedWidget中。

更新:

我在做

    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从未出现的原因。

我仍然不知道。

2 个答案:

答案 0 :(得分:2)

您的connect电话错误。您无法定义在建立连接时将传递给插槽的值。相反,你需要创建自己的插槽并根据需要处理信号(如果我的python语法关闭,请道歉):

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

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

答案 1 :(得分:0)

最后,它以这种方式运作:

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

至少收到信号并正确调用方法。