Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion Orange/widgets/evaluate/owtestandscore.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from AnyQt.QtCore import Qt, QSize, QThread
from AnyQt.QtCore import pyqtSlot as Slot
from AnyQt.QtGui import QStandardItem, QDoubleValidator
from AnyQt.QtWidgets import QHeaderView, QTableWidget, QLabel
from AnyQt.QtWidgets import QHeaderView, QTableWidget, QLabel, QApplication

from Orange.base import Learner
import Orange.classification
Expand Down Expand Up @@ -1085,6 +1085,8 @@ def cancel(self):
task.cancel()
task.progress_changed.disconnect(self.setProgressValue)
task.watcher.finished.disconnect(self.__task_complete)
add_task_to_dispose_queue(task)

self.progressBarFinished()
self.setStatusMessage("")

Expand All @@ -1094,6 +1096,15 @@ def onDeleteWidget(self):
super().onDeleteWidget()


def add_task_to_dispose_queue(task: TaskState):
# transfer ownership of task to Qt, and delete it after completion
# all other signals from task should be disconnected.
assert task.parent() is None
app = QApplication.instance()
task.setParent(app)
task.watcher.finished.connect(task.deleteLater)


class UserInterrupt(BaseException):
"""
A BaseException subclass used for cooperative task/thread cancellation
Expand Down