gpt4 book ai didi

python - 使用父窗口的 closeevent 关闭 pyqt messageBox

转载 作者:行者123 更新时间:2023-12-01 05:02:02 25 4
gpt4 key购买 nike

我有以下一 block 蛋糕

def __init__():
self._taskInProgress = threading.Event()


def isFinished(self):
self._taskInProgress.clear()
self.progressBar.hide()
self.close()


def closeEvent(self, event):
if self._taskInProgress.is_set():
reply = QtGui.QMessageBox.question(self, "Are you sure you want to quit? ",
"Task is in progress !",
QtGui.QMessageBox.Yes,
QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
event.accept()
else:
event.ignore()

问题是,如果有人关闭父窗口(即自己),则会显示上述提示,但如果有人在此消息框中没有按"is"或“否”,则父窗口不会关闭。

那么我应该如何实现当任务完成时QMessageBox(即回复)也被iteslef关闭,就像调用reply.close()

最佳答案

换个方式,就是调用bool QWidget.close (self)通过不按窗口中的 X 按钮来关闭小部件。 (或者在本例中是调用 isFinished)。我们可以重写 is close 方法并添加标志来控制 QWidget.closeEvent (self, QCloseEvent) 。像这样;

import sys
from PyQt4 import QtCore, QtGui

class QCsMainWindow (QtGui.QMainWindow):
def __init__ (self):
super(QCsMainWindow, self).__init__()
self.isDirectlyClose = False
QtCore.QTimer.singleShot(5 * 1000, self.close) # For simulate test direct close

def close (self):
for childQWidget in self.findChildren(QtGui.QWidget):
childQWidget.close()
self.isDirectlyClose = True
return QtGui.QMainWindow.close(self)

def closeEvent (self, eventQCloseEvent):
if self.isDirectlyClose:
eventQCloseEvent.accept()
else:
answer = QtGui.QMessageBox.question (
self,
'Are you sure you want to quit ?',
'Task is in progress !',
QtGui.QMessageBox.Yes,
QtGui.QMessageBox.No)
if (answer == QtGui.QMessageBox.Yes) or (self.isDirectlyClose == True):
eventQCloseEvent.accept()
else:
eventQCloseEvent.ignore()

appQApplication = QtGui.QApplication(sys.argv)
mainQWidget = QCsMainWindow()
mainQWidget.show()
sys.exit(appQApplication.exec_())

关于python - 使用父窗口的 closeevent 关闭 pyqt messageBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25882595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com