小工具打开一秒然后自动关闭?

时间:2013-09-22 08:58:18

标签: python pyqt4 show

当我点击某个按钮时,我一直试图让一个简单的小部件出现,但由于某种原因,我的小部件一直在消失,我不明白为什么。下面是我为小部件提供的代码:

if button.pressed() == True: 
    box = messageBox(self.text)
    box.show()

class messageBox(QtGui.QWidget):

    def __init__(self, text):
        self.message = text
        super(messageBox, self).__init__() 
        self.initUI()

    def initUI(self):
        self.resize(250, 100)
        self.move(300, 300)
        self.label = QtGui.QLabel(self)
        self.label.setText(self.message.toPlainText()) 

当按下按钮时,我只想显示一个包含self.text中所有信息的小部件,但由于某些原因,当我单击按钮时,我的小部件会一直消失。如果有人可以帮助,将非常感谢!谢谢!

1 个答案:

答案 0 :(得分:0)

它消失了,因为它收集了垃圾。您创建了一个框,但是当您的函数完成时,变量box将被删除,因为没有任何东西指向窗口小部件,它会被垃圾收集并消失。您必须保存对box的引用并将其保留在某处。例如:

from PyQt4 import QtGui, QtCore

class messageBox(QtGui.QWidget):
    def __init__(self, text):
        super(messageBox, self).__init__() 
        self.message = text
        self.initUI()

    def initUI(self):
        self.resize(250, 100)
        self.move(300, 300)
        self.label = QtGui.QLabel(self)
        self.label.setText(self.message) 

class MainWidget(QtGui.QWidget):
    def __init__(self, text):
        super(MainWidget, self).__init__() 
        button = QtGui.QPushButton('Push')
        button.pressed.connect(self.on_button_pressed)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(button)
        self.setLayout(layout)

    def on_button_pressed(self):
        self.box = messageBox('foo')
        self.box.show()

app = QtGui.QApplication([])
mw = MainWidget('test')
mw.show()
app.exec_()

此外,你不应该检查if button.pressed()你应该将它的pressed信号连接到按下按钮时将被调用的函数(但我认为该片段只是一个伪代码)。 / p>