Крашит 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_())
