0

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

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 中显示一个包含所有信息的小部件,但由于某种原因,当我单击按钮时,我的小部件不断消失。如果有人可以提供帮助,将不胜感激!谢谢!

4

1 回答 1

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信号连接到按下按钮时将调用的函数(但我认为该片段只是一个伪代码)。

于 2013-09-22T09:43:08.037 回答