当我点击某个按钮时,我一直试图让一个简单的小部件出现,但由于某种原因,我的小部件一直在消失,我不明白为什么。下面是我为小部件提供的代码:
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中所有信息的小部件,但由于某些原因,当我单击按钮时,我的小部件会一直消失。如果有人可以帮助,将非常感谢!谢谢!
答案 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>