Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt:如何使用按钮替换小部件?_Python_Widget_Pyqt - Fatal编程技术网

Python PyQt:如何使用按钮替换小部件?

Python PyQt:如何使用按钮替换小部件?,python,widget,pyqt,Python,Widget,Pyqt,我正在尝试编写一个简单的代码,当用户单击按钮时,它会将现有的文本小部件更改为另一个文本小部件。 所以我有 title1=QtGui.QLabel('Hello') title2=QtGui.QLabel('bye') abutton=QtGui.QPushButton('Click me') grid.addWidget(title1,1,5) grid.addWidget(abutton,3,5) 我有一个功能: def myfunc(self): self.grid.rem

我正在尝试编写一个简单的代码,当用户单击按钮时,它会将现有的文本小部件更改为另一个文本小部件。 所以我有

title1=QtGui.QLabel('Hello')
title2=QtGui.QLabel('bye')
abutton=QtGui.QPushButton('Click me')
grid.addWidget(title1,1,5)
grid.addWidget(abutton,3,5)
我有一个功能:

def myfunc(self):
        self.grid.removeWidget(self.title1)
        self.grid.addWidget(title2,1,5)
在我这样做之后,我希望将我的“你好”改为“再见”:

abutton.clicked.connect(self.myfunc)
但显然这不起作用。我已经检查过了:removeWidged在函数之外工作得非常好(我的第一个想法可能是,我在函数中做了一些错误的事情),而且函数本身也可以工作(我通过制作打印内容进行了检查,单击按钮后它就工作了,但小部件仍然存在)


我可能做错了什么?谢谢。

您输入了错别字,并尝试使用本地变量,就像代码中的许多问题一样。下面是一个工作示例

from PyQt4 import QtGui, QtCore
import sys

class BASEGUICLS(QtGui.QDialog):
    def __init__(self,parent=None):
        super(BASEGUICLS, self).__init__(parent)
        self.gridLayout = QtGui.QGridLayout()
        self.title1=QtGui.QLabel('Hello')
        self.title2=QtGui.QLabel('bye')
        abutton=QtGui.QPushButton('Click me')
        self.gridLayout.addWidget(self.title1,1,5)
        self.gridLayout.addWidget(abutton,3,5)
        self.setLayout(self.gridLayout)
        abutton.clicked.connect(self.myfunc)

    def myfunc(self):
        self.gridLayout.removeWidget(self.title1)
        self.title1.deleteLater()
        self.gridLayout.addWidget(self.title2,1,5)


def main():
    app = QtGui.QApplication(sys.argv)
    ex = BASEGUICLS(None)
    ex.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

您的代码中是输入错误title2=QtGui.QLalel('bye')还是仅在这个问题中?(QLalel不是QLabel)它就在这里对不起。我把它作为一个例子贴了出来。UPD:编辑了帖子你确认了当你点击按钮时你的回调被调用了吗?这是什么意思?你能给我举个例子吗,我对PyQt不是很好,我昨天第一次遇到它。哦,我的意思是,如果你在myfunc函数中添加一个print语句,它会被打印吗?我试着运行这个函数,它会做些什么。。。但它只是删除了小部件,而没有创建新的小部件:(你的意思是它做了些什么?。它会创建一个新的。你会看到Hello将被删除,Bye将被添加到网格布局的同一位置。如果我得到正确的答案,这就是你想要的,对吗?