Need help with the following problem:
There is a button on the main window (pushButton_2) that should stop the thread, but it doesn't work, I can't figure out what I'm doing wrong. Please advise how to solve this problem.
Main window code:
import sys
from PySide6.QtWidgets import *
from Controller.Potok_Controller import Potok_Controller
from View.ui_potok import Ui_MainWindow
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.myThread = Potok_Controller()
self.ui.pushButton.clicked.connect(self.open_window)
self.ui.pushButton_2.clicked.connect(self.stop)
def open_window(self):
self.myThread.mysignal.connect(lambda text: self.ui.plainTextEdit.appendPlainText(text))
self.myThread.start()
def stop(self):
self.myThread.stop = False
if __name__ == '__main__':
app = QApplication()
window = MainWindow()
window.show()
sys.exit(app.exec())
Main window rendering code:
# -*- coding: utf-8 -*-
################################################################################
## Form generated from reading UI file 'untitledlFDrVZ.ui'
##
## Created by: Qt User Interface Compiler version 6.3.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QFrame, QMainWindow, QPlainTextEdit,
QPushButton, QSizePolicy, QVBoxLayout, QWidget)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.verticalLayout = QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName(u"verticalLayout")
self.frame = QFrame(self.centralwidget)
self.frame.setObjectName(u"frame")
self.frame.setFrameShape(QFrame.StyledPanel)
self.frame.setFrameShadow(QFrame.Raised)
self.verticalLayout_2 = QVBoxLayout(self.frame)
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
self.plainTextEdit = QPlainTextEdit(self.frame)
self.plainTextEdit.setObjectName(u"plainTextEdit")
self.verticalLayout_2.addWidget(self.plainTextEdit)
self.verticalLayout.addWidget(self.frame)
self.frame_2 = QFrame(self.centralwidget)
self.frame_2.setObjectName(u"frame_2")
self.frame_2.setFrameShape(QFrame.StyledPanel)
self.frame_2.setFrameShadow(QFrame.Raised)
self.verticalLayout_3 = QVBoxLayout(self.frame_2)
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
self.pushButton = QPushButton(self.frame_2)
self.pushButton.setObjectName(u"pushButton")
self.verticalLayout_3.addWidget(self.pushButton)
self.pushButton_2 = QPushButton(self.frame_2)
self.pushButton_2.setObjectName(u"pushButton_2")
self.verticalLayout_3.addWidget(self.pushButton_2)
self.verticalLayout.addWidget(self.frame_2)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.pushButton.setText(QCoreApplication.translate("MainWindow", u"Start Thread", None))
self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u"Stop Thread", None))
# retranslateUi
Class code where Thread is implemented:
import time
from PySide6.QtCore import QThread, Signal
from selenium import webdriver
class Potok_Controller(QThread):
mysignal = Signal(str)
finish_signal = Signal()
def __init__(self, parent=None):
super(Potok_Controller, self).__init__(parent)
self.url = ['https://google.com/', 'https://youtube.com/']
self.stop = True
def txt(self):
while self.stop == True:
for url in self.url:
self.mysignal.emit(f'open {url}')
chrome = webdriver.Chrome(executable_path='chromedriver\\chromedriver.exe')
chrome.get(url=f"{url}")
time.sleep(10)
chrome.close()
chrome.quit()
#chrome.save_screenshot('datadome_regular_webdriver.png')
self.finish_signal.emit()
def run(self):
self.txt()