後,我有一個了QDialog,我在那裏創建一個QTimer對象,這將觸發每ň秒的功能。關閉對話框(按下x按鈕)後,計時器仍然開始工作,似乎沒有被銷燬。我怎樣才能阻止它?目前作爲解決方法,我明確地呼籲Qtimer.stop()當進入closeEvent()?QTimer運行對話框關閉
我希望當窗口關閉時,即使當我明確調用解構器時,每個類成員都會被刪除,Qtimer對象仍然存在。
from PyQt4 import QtGui, QtCore
import sys
def update():
print "tick..."
class Main(QtGui.QDialog):
def __init__(self, parent = None):
super(Main, self).__init__(parent)
self.timer = QtCore.QTimer()
self.timer.timeout.connect(update)
self.timer.start(2000)
# scroll area
self.scrollArea = QtGui.QScrollArea()
self.scrollArea.setWidgetResizable(True)
# main layout
self.mainLayout = QtGui.QVBoxLayout()
self.setLayout(self.mainLayout)
def closeEvent(self, evt):
print "class event called"
self.timer.stop()
myWidget = Main()
myWidget.show()
感謝您的回覆,我嘗試了setParent(self)和setParent(self.parent),但它沒有奏效。我有什麼想法嗎? – user1767754
@ user1767754您可能還需要設置對話框的['Qt.WA_DeleteOnClose'](http://doc.qt.io/qt-4.8/qt.html#WidgetAttribute-enum)屬性,以便對話框(和它是兒童)實際上被刪除。 –
其實設置:self.timer = QtCore.QTimer(self)解決了這個問題,setParent被凍結。如果你可以將這個納入你的答案,我會將其標記爲正確的答案。感謝您的幫助,但。 – user1767754