from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import time

class SomeApp(QWidget):
    def __init__(self):
        QWidget. __init__(self)
        self.setWindowTitle('Here we go')
        self.bsolve = QPushButton(self)
        self.bsolve.setGeometry(QRect(50,50, 40,20))
        self.bsolve.setText('!')
        self.bsolve.clicked.connect(self.myfoo)
        self.bsolve.setToolTip('Press X to win')
        self.show()
    def myfoo(self):
        self.n = 10
        self.cancelled = False
        self.progress = QProgressDialog('In use...', 'Stop!', 0, self.n, self)
        self.setWindowModality(Qt.WindowModal)
        self.progress.setMinimumDuration(1000)
        for self.elem in range(0, self.n):
            self.progress.setValue(self.elem)
            if self.progress.wasCanceled():
                self.cancelled = True
                return
            time.sleep(1)
        self.progress.deleteLater()

if __name__ == '__main__':
    import sys
    apl = QApplication(sys.argv)
    window = SomeApp()
    sys.exit(apl.exec_())