Open In App

How to use threading in PyQt5?

Improve
Improve
Like Article
Like
Save
Share
Report

Prerequisite: PyQt5 and multithreading

Multithreading refers to concurrently executing multiple threads by rapidly switching the control of the CPU between threads (called context switching). The Python Global Interpreter Lock limits one thread to run at a time even if the machine contains multiple processors.​

In this article, we will learn, how to use threading in Pyqt5. While Creating a GUI there will be a need to do multiple work/operations at the backend. Suppose we want to perform 4 operations simultaneously. The problem here is, each operation executes one by one. During the execution of one operation, the GUI window will also not move and this is why we need threading. Both implementations are given below which obviously will help understand their differences better.

Approach

  • Import libraries required
  • Create a simple Window
  • Add Button with command
  • Execute Pyqt5

Without Threading

Working without threads, makes the process delayed. Also, the window will not move until full execution takes place.

Python3




# Import Module
import sys
from PyQt5.QtWidgets import *
import time
  
class ListBox(QWidget):
  
    def __init__(self):
        super().__init__()
  
        self.Button()
  
    def Button(self):
        # Add Push Button
        clear_btn = QPushButton('Click Me', self)
        clear_btn.clicked.connect(self.Operation)
  
        # Set geometry
        self.setGeometry(200, 200, 200, 200)
  
        # Display QlistWidget
        self.show()
  
    def Operation(self):
        print("time start")
        time.sleep(10)
        print("time stop")
  
  
if __name__ == '__main__':
    app = QApplication(sys.argv)
      
    # Call ListBox Class
    ex = ListBox()
  
    # Close the window
    sys.exit(app.exec_())


Output:

With Threading

Whenever we click on the “Click Me” Button, it will call the thread() method. Inside the thread method, we are creating a Thread Object where we define our function name.

Python3




# Import Module
import sys
from PyQt5.QtWidgets import *
import time
from threading import *
  
class ListBox(QWidget):
  
    def __init__(self):
        super().__init__()
  
        self.Button()
  
    def Button(self):
        # Add Push Button
        clear_btn = QPushButton('Click Me', self)
        clear_btn.clicked.connect(self.thread)
  
        # Set geometry
        self.setGeometry(200, 200, 200, 200)
  
        # Display QlistWidget
        self.show()
  
    def thread(self):
        t1=Thread(target=self.Operation)
        t1.start()
  
    def Operation(self):
        print("time start")
        time.sleep(10)
        print("time stop")
  
  
if __name__ == '__main__':
    app = QApplication(sys.argv)
      
    # Call ListBox Class
    ex = ListBox()
  
    # Close the window
    sys.exit(app.exec_())


Output:



Last Updated : 24 Feb, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads