用pyqt4写个定时弹出框的问题

想要做个定时提醒功能之类的小软件,写了下面的代码,但是只能弹出一次就自动退出了。

[code="python"]
import sys
from PyQt4 import QtGui,QtCore
import time

class MyWidget(QtGui.QWidget):
def init(self, msg, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setFixedSize(200, 120)
self.quit = QtGui.QPushButton(msg, self)
self.quit.setGeometry(62, 40, 75, 30)
self.quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold))
self.connect(self.quit, QtCore.SIGNAL("clicked()"),
QtGui.qApp, QtCore.SLOT("quit()"))

def msgshow(msg):
app = QtGui.QApplication(sys.argv)
widget = MyWidget(msg)
widget.show()
sys.exit(app.exec_())

while True:
msgshow('haah')
time.sleep(3)
[/code]

不知道问题出在哪里呢?
谢谢

[code="python"]
import sys
from PyQt4 import QtGui,QtCore
import time

class MyWidget(QtGui.QWidget):
def init(self, msg, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setFixedSize(200, 120)
self.quit = QtGui.QPushButton(msg, self)
self.quit.setGeometry(62, 40, 75, 30)
self.quit.setFont(QtGui.QFont("Times", 18, QtGui.QFont.Bold))
self.connect(self.quit, QtCore.SIGNAL("clicked()"),
QtGui.qApp, QtCore.SLOT("quit()"))

def msgshow(self):
    self.setVisible(True)
    time.sleep(10)
    self.setVisible(False)
    time.sleep(10)
    self.msgshow()

if name == '__main__':
app = QtGui.QApplication(sys.argv)
widget = MyWidget('haha')
widget.msgshow()
sys.exit(app.exec_())
[/code]

msgshow('haah')应该只做弹出框的功能,
[code="java"]
app = QtGui.QApplication(sys.argv)

widget = MyWidget()

sys.exit(app.exec_())
[/code]
这段代码只需执行一次

窗口无响应的话你需要起动另外一个线程来控制窗口的显示和隐藏

还是弹气泡窗口吧,对话框比较麻烦,还要点关闭等等,而且如果前面的忘了关闭的话,最后会有一堆对话框,一个个关烦都烦死。