GUI freezing for second run

Heads up! You've already completed this tutorial.

Ganesh_Gupta | 2021-05-30 15:35:33 UTC | #1

I am creating a GUI which use external Python script function with parramters for calcualtion and updating progressbar.I had used multithreading.It works fine for first run but if I change dropdown and lineedit parameter and click again on calculate button it does not respose. I have three level dropdown on basis of that we select python script for running function by using csv sheet for calcualtion. GUI image is attached [GUI image for calcuation][1] software|690x118

This is My code

python
import sys
import os
from decimal import Decimal
import time
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
from pathlib import Path
from CONNECTDATABASE import*
from RB import*
from UPDATEDATABASEthread import*
import subprocess
from urllib.request import urlopen
qtCreatorFile = "SMOG_COLASCE_DEVELOPER_INTERFACE1.ui" # Enter file here.
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
class Worker(QObject):
    hashed = pyqtSignal(str)
    signal=pyqtSignal(int)
    finished = pyqtSignal()
    @pyqtSlot(str,str,str,str,str,str)
    def cal_functions(self,filter,filter1,IND,OTD,Version,Year):
        if filter=='RB':
            if filter1 =='None':
                x=ARBthread(self,IND,OTD,Version,Year)
                self.hashed.emit(x)

        self.finished.emit()
class Worker1(QObject)   :
    def __init__(self):
        super().__init__()
    hashed1 = pyqtSignal(str)
    signal=pyqtSignal(int)
    finished = pyqtSignal()
    @pyqtSlot(str,str,str,str,str,str,str,str,str)
    def update_database(self,hostname,port,username,password,Database_Name,IND,OTD,Version,Year):
        x1=UPDATEDATABASEthread(self,hostname,port,username,password,Database_Name,IND,OTD,Version,Year)
        self.hashed1.emit(x1)
        self.finished.emit()

class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    cal_requested = pyqtSignal(str,str,str,str,str,str)
    data_requested= pyqtSignal(str,str,str,str,str,str,str,str,str)
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.setWindowTitle("SMoG-India COALESCE")
        self.Sector.currentIndexChanged.connect(self.comboBox_sector_change)
self.SubSectorLevel1.currentIndexChanged.connect(self.comboBox_subsector_change)
        self.Calculate.clicked.connect(self.calc)
        self.toolButton.clicked.connect(self._open_file_dialog)
        self.toolButton_2.clicked.connect(self._open_file_dialog1)
        self.toolButton_3.clicked.connect(self._open_file_dialog2)
        self.checkBox_2.stateChanged.connect(self.checkedcLS)
        self.checkBox_3.stateChanged.connect(self.checkedcRS)
        self.pushButton_3.clicked.connect(self.Database)
        self.pushButton_4.clicked.connect(self.ConnectDatabase)
        self.lineEdit_5.setReadOnly(True)
        self.lineEdit_6.setReadOnly(True)
        self.lineEdit_7.setReadOnly(True)
        self.lineEdit_8.setReadOnly(True)
        self.lineEdit_9.setReadOnly(True)
        self.pushButton_2.clicked.connect(self.close_event)
        self.pushButton.clicked.connect(self.open_tutorial)

        # Create a worker object and a thread
        self.worker = Worker()
        self.worker_thread = QThread()
        self.worker.hashed.connect(self.messagebox)
        self.worker.signal.connect(self.update_progress_bar)
        self.cal_requested.connect(self.worker.cal_functions)
        self.worker.moveToThread(self.worker_thread)
        self.worker.finished.connect(self.worker_thread.quit)
        self.worker.finished.connect(self.worker.deleteLater)
        self.worker_thread.start()
        self.worker_thread.finished.connect(self.finish)
        self.worker1 = Worker1()
        self.worker1_thread = QThread()
        self.worker1.hashed1.connect(self.messagebox)
        self.worker1.signal.connect(self.update_progress_bar)
        self.worker1.moveToThread(self.worker1_thread)
        self.data_requested.connect(self.worker1.update_database)
        self.worker1.finished.connect(self.worker1_thread.quit)
        self.worker1.finished.connect(self.worker1.deleteLater)
        self.worker1_thread.finished.connect(self.worker1_thread.deleteLater)
        self.worker1_thread.start()
        self.worker1_thread.finished.connect(self.finish)
   def calc(self):
        progressBar = self.progressBar
        self.Calculate.setEnabled(False)
        self.SubSectorLevel1.setEnabled(False)
        self.SubSectorLevel2.setEnabled(False)
        self.Sector.setEnabled(False)
        self.toolButton_2.setEnabled(False)
        self.toolButton_3.setEnabled(False)
        self.lineEdit_10.setReadOnly(True)
        self.lineEdit_4.setReadOnly(True)
        self.toolButton_2.setEnabled(False)
        self.toolButton_3.setEnabled(False)
        filter = self.SubSectorLevel1.currentText()
        filter1 = self.SubSectorLevel2.currentText()
        IND = self.lineEdit.text()
        OTD = self.lineEdit_2.text()
        Version= self.lineEdit_10.text()
        Year=self.lineEdit_4.text()
        self.cal_requested.emit(filter,filter1,IND,OTD,Version,Year)

``` if name == "main": global app app = QtWidgets.QApplication.instance() if app is None: app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())

It will be Great if you help in this


stelaldridge11281 | 2021-06-07 15:01:08 UTC | #2

Hi Ganesh,

Over 15,000 developers have bought Create GUI Applications with Python & Qt!
Create GUI Applications with Python & Qt5
Take a look

Downloadable ebook (PDF, ePub) & Complete Source code

Also available from Leanpub and Amazon Paperback

[[ discount.discount_pc ]]% OFF for the next [[ discount.duration ]] [[discount.description ]] with the code [[ discount.coupon_code ]]

Purchasing Power Parity

Developers in [[ country ]] get [[ discount.discount_pc ]]% OFF on all books & courses with code [[ discount.coupon_code ]]

Did you find a solution already or it is still unsolved?

Packaging Python Applications with PyInstaller by Martin Fitzpatrick — This step-by-step guide walks you through packaging your own Python applications from simple examples to complete installers and signed executables.

More info Get the book


PyQt/PySide 1:1 Coaching with Martin Fitzpatrick — Save yourself time and frustration. Get one on one help with your Python GUI projects. Working together with you I'll identify issues and suggest fixes, from bugs and usability to architecture and maintainability.

Book Now 60 mins ($195)

Well done, you've finished this tutorial! Mark As Complete
[[ user.completed.length ]] completed [[ user.streak+1 ]] day streak
Martin Fitzpatrick

GUI freezing for second run was written by Martin Fitzpatrick .

Martin Fitzpatrick has been developing Python/Qt apps for 8 years. Building desktop applications to make data-analysis tools more user-friendly, Python was the obvious choice. Starting with Tk, later moving to wxWidgets and finally adopting PyQt. Martin founded PythonGUIs to provide easy to follow GUI programming tutorials to the Python community. He has written a number of popular Python books on the subject.