2013-09-22 34 views
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但由於某種原因我的小部件保持當我點擊全部消失的信息顯示一個widget按鈕。如果有人能幫助,將不勝感激!謝謝!

回答

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信號到無論何時按下按鈕時,將調用的函數(但我認爲片斷只是一個僞代碼)。

+0

嗯,我想我只是有點困惑。上面的代碼如何保存對messageBox類的引用? – user1871869

+0

@ user1871869它將其保存爲'MainWidget'類的'self.box'屬性。由於整個程序中將存在'MainWidget',因此它的任何屬性都將被垃圾收集。 –