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

时间:2015-11-12 22:28:47

标签: 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.removeWidget(self.title1)
        self.grid.addWidget(title2,1,5)

我希望改变我的"你好" to" bye"在我这样做之后:

abutton.clicked.connect(self.myfunc)

但显然这不起作用。并且我已经检查过:removeWidged在函数之外完美地工作(我的第一个想法是,也许,我在函数中做错了),而且函数本身也能正常工作(我通过制作打印东西来检查它曾经点击过按钮,但小部件仍在那里)

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

1 个答案:

答案 0 :(得分:1)

你有错字,你在代码中尝试了很多问题的本地变种。这是一个工作示例

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()