Я все еще новичок в python и ОЧЕНЬ новичок в реализации GUI и многопоточности, я написал небольшое приложение, которое использует selenium для сбора данных и взаимодействия с веб-сайтом, эта часть работает отлично, GUI работает нормально, моя проблема гарантирует, что Chrome закрывается, если приложение закрывается без завершения.
Я пытался создать класс webdriver за пределами класса с резьбой, чтобы его можно было завершить, я не мог добиться, чтобы это имело какой-либо эффект, я также пытался обратиться к объекту webdriver извне класса, в котором это работает, после нескольких часов поиска должен быть легкий (или более простой) способ, которым я просто не понимаю ...
class Worker(QRunnable):
#Worker Thread
def __init__(self, *args, **kwargs):
super(Worker, self).__init__()
self.args = args
self.kwargs = kwargs
self.signals = WorkerSignals()
self.kwargs['progress_callback'] = self.signals.status
def run(self):
This is where selenium runs etc, this is where the
webdriver object is located that i need to terminate from
outside the 'Worker' thread.
И пример кода GUI, массово урезанный просто для примера, у меня уже есть обработчик closeEvent, я просто не могу на всю жизнь понять, как отключить веб-драйвер, чтобы браузер закрывался. если графический интерфейс пользователя закрыт до завершения работы потока ...
class myWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(myWindow, self).__init__(parent, QtCore.Qt.WindowStaysOnTopHint)
self.setupUi(self)
self.show()
self.move(0,0)
self.threadpool = QThreadPool()
self.pushButton.clicked.connect(self.btnClicked)
def btnClicked(self):
user = self.userEdit.text()
password = self.passwordEdit.text()
url = self.urlEdit.text()
worker = Worker(user,password,url)
worker.signals.status.connect(self.statusUpdate)
worker.signals.progress.connect(self.progressUpdate)
self.threadpool.start(worker)
def closeEvent(self, *args, **kwargs):
super(QtWidgets.QMainWindow, self).closeEvent(*args, **kwargs)
print('Closed')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ex = myWindow()
sys.exit(app.exec_())
Мне нужно, чтобы решение подходило для macOS и Windows, поэтому в идеале должно быть действие, выполняемое внутри самого приложения без вызова каких-либо внешних функций kill ...
Если бы кто-нибудь мог помочь, это было бы здорово! Или даже просто направь меня в правильном направлении ... Это было бы очень ценно ...
Заранее спасибо ...