-1

我正在尝试将一个小部件替换为另一个小部件。我正在使用 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 的按钮时会收到“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 从未显示的原因。

我还是不知道。

4

2 回答 2

2

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

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

def w1Clicked(self):
    self.stackedWidget.setCurrentWidget(w2)
于 2012-11-16T01:29:24.190 回答
0

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

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

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

于 2012-11-16T14:37:07.443 回答