Corona Virus cases of various countries - Using Python PyQt
Last Updated : 12 Jul, 2025
In this article we will see how we can create a PyQt5 application that tells about the details of coronavirus cases i.e total cases, recovered cases and total deaths only by typing the name of the country.
Modules required and Installation:PyQt5 : PyQt is a Python binding of the cross-platform GUI toolkit Qt, implemented as a Python plug-in. PyQt is free software developed by the British firm Riverbank Computing.
Requests : Requests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs.
Beautiful Soup: Beautiful Soup is a library that makes it easy to scrape information from web pages. It sits atop an HTML or XML parser, providing Pythonic idioms for iterating, searching, and modifying the parse tree.
Implementations steps :
1. Create a non-editable combo box, set its geometry
2. Create country list which contain countries name and add it to the combo box
3. Create three labels to show information about total cases, recovered cases and death cases
4. Set geometry, alignment and border to each label
5. Add action to the combo box
6. Inside the action get the country name and scrap the data from the website with the help of requests BeautifulSoup
7. Convert the raw data into html code and then filter it to get the required output
8. Show the output the screen with the help of labels
Below is the implementation
Python3 1==
# importing librariesfromPyQt5.QtWidgetsimport*fromPyQt5importQtCore,QtGuifromPyQt5.QtGuiimport*fromPyQt5.QtCoreimport*frombs4importBeautifulSoupasBSimportrequestsimportsysclassWindow(QMainWindow):def__init__(self):super().__init__()# setting titleself.setWindowTitle("Python ")# setting geometryself.setGeometry(100,100,400,500)# calling methodself.UiComponents()# showing all the widgetsself.show()# method for widgetsdefUiComponents(self):# countries list // user can add other countries as wellself.country=["india","us","spain","china","russia","pakistan","nepal","italy","spain","uk","brazil"]# creating a combo box widgetself.combo_box=QComboBox(self)# setting geometry to combo boxself.combo_box.setGeometry(100,50,200,40)# setting fontself.combo_box.setFont(QFont('Times',10))# adding items to combo boxforiinself.country:i=i.upper()self.combo_box.addItem(i)# adding action to the combo boxself.combo_box.activated.connect(self.get_cases)# creating label to show the total casesself.label_total=QLabel("Total Cases ",self)# setting geometryself.label_total.setGeometry(100,300,200,40)# setting alignment to the textself.label_total.setAlignment(Qt.AlignCenter)# adding border to the labelself.label_total.setStyleSheet("border : 2px solid black;")# creating label to show the recovered casesself.label_reco=QLabel("Recovered Cases ",self)# setting geometryself.label_reco.setGeometry(100,350,200,40)# setting alignment to the textself.label_reco.setAlignment(Qt.AlignCenter)# adding borderself.label_reco.setStyleSheet("border : 2px solid black;")# creating label to show death casesself.label_death=QLabel("Total Deaths ",self)# setting geometryself.label_death.setGeometry(100,400,200,40)# setting alignment to the textself.label_death.setAlignment(Qt.AlignCenter)# adding border to the labelself.label_death.setStyleSheet("border : 2px solid black;")# method called by pushdefget_cases(self):# getting country nameindex=self.combo_box.currentIndex()country_name=self.country[index]# creating url using country nameurl="https://www.worldometers.info/coronavirus/country/"+country_name+"/"# getting the request from urldata=requests.get(url)# converting the textsoup=BS(data.text,'html.parser')# finding meta info for casescases=soup.find_all("div",class_="maincounter-number")# getting total cases numbertotal=cases[0].text# filtering ittotal=total[1:len(total)-2]# getting recovered cases numberrecovered=cases[2].text# filtering itrecovered=recovered[1:len(recovered)-1]# getting death cases numberdeaths=cases[1].text# filtering itdeaths=deaths[1:len(deaths)-1]# show data through labelsself.label_total.setText("Total Cases : "+total)self.label_reco.setText("Recovered Cases : "+recovered)self.label_death.setText("Total Deaths : "+deaths)# create pyqt5 appApp=QApplication(sys.argv)# create the instance of our Windowwindow=Window()window.show()# start the appsys.exit(App.exec())