Крашит GUI на PyQT5

Есть простая GUI с двумя кнопками, первая запускает цикл, вторая останавливает.

Но при нажатии кнопки запуск крашится GUI, как выяснил, это происходит при записи переменной key.

Как можно решить данную проблему ? И каким более простым способом можно остановить цикл пр нажатии кнопки ?

class startmine(QThread):
    def __init__(self, mainwindow):
        super().__init__()
        self.mainwindow = mainwindow

    def run(self):
        self.mining_s()

    .........
            self.start = startmine(mainwindow=self)
            self.pushButton.clicked.connect(self.start)
            self.pushButton_2.clicked.connect(self.stop)
    
        def start(self):
            self.x = 1
            self.start_stop()
            return self.x
    
        def stop(self):
            self.x = 0
            self.start_stop()
            return self.x
    
        def start_stop(self):
            if self.x == 0:
                self.stop_key = True
            elif self.x == 1:
                self.start.start()
                self.stop_key = False
            print(self.stop_key)
            return self.stop_key

    def mining_s():
        obj = Ui_MainWindow()
        key = obj.start_stop()
        while key == True:

Ответы (1 шт):

Автор решения: S. Nick

Ваша задача должна выглядеть примерно так:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class Thread(QThread):
    updateSignal = QtCore.pyqtSignal(int)                              # !!!

    def __init__(self, num):
        super().__init__()
        self.x = num

    def run(self):
        self.keepRunning = True
        while self.keepRunning:
            self.x += 1
            self.updateSignal.emit(self.x)                             # !!!
            self.msleep(1000 * 1)          # 1 сек, задайте нужный вам итервал ожидания
                
    def stop(self):
        self.keepRunning = False
                

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        
        self.pushButton = QPushButton('Запустить цикл.')
        self.pushButton.clicked.connect(self.go_clicked)
        
        self.pushButton_2 = QPushButton('Остановить цикл.')
        self.pushButton_2.clicked.connect(self.stop_clicked)

        self.textEdit = QTextEdit()

        layout = QGridLayout(self)
        layout.addWidget(self.textEdit, 0, 0, 1, 2)
        layout.addWidget(self.pushButton, 1, 0)
        layout.addWidget(self.pushButton_2, 1, 1)
        
        self.num = 0
        self.thread = Thread(self.num)
        self.thread.updateSignal.connect(self.update_textEdit)           # !!! 
                
    def update_textEdit(self, value):                                    # !!!
        self.textEdit.append(f'{self.num} + 1 = {value}')
        self.num = value

    def go_clicked(self):
        self.thread.start()
        
    def stop_clicked(self):
        self.thread.stop()
               
                
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка