How to use threading in PyQt5?
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 sys
from PyQt5.QtWidgets import *
import time
class ListBox(QWidget):
def __init__( self ):
super ().__init__()
self .Button()
def Button( self ):
clear_btn = QPushButton( 'Click Me' , self )
clear_btn.clicked.connect( self .Operation)
self .setGeometry( 200 , 200 , 200 , 200 )
self .show()
def Operation( self ):
print ( "time start" )
time.sleep( 10 )
print ( "time stop" )
if __name__ = = '__main__' :
app = QApplication(sys.argv)
ex = ListBox()
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 sys
from PyQt5.QtWidgets import *
import time
from threading import *
class ListBox(QWidget):
def __init__( self ):
super ().__init__()
self .Button()
def Button( self ):
clear_btn = QPushButton( 'Click Me' , self )
clear_btn.clicked.connect( self .thread)
self .setGeometry( 200 , 200 , 200 , 200 )
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)
ex = ListBox()
sys.exit(app.exec_())
|
Output:
Last Updated :
24 Feb, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...