我正在尝试将小部件替换为另一个。我正在使用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从未出现的原因。
我仍然不知道。
答案 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)
至少收到信号并正确调用方法。