📜  各国新冠病毒病例——使用Python PyQt

📅  最后修改于: 2022-05-13 01:55:12.619000             🧑  作者: Mango

各国新冠病毒病例——使用Python PyQt

在本文中,我们将了解如何创建一个 PyQt5 应用程序,该应用程序仅通过输入国家名称来告知冠状病毒病例的详细信息,即总病例、康复病例和总死亡人数。

下面是实现

# importing libraries
from PyQt5.QtWidgets import * 
from PyQt5 import QtCore, QtGui
from PyQt5.QtGui import * 
from PyQt5.QtCore import * 
from bs4 import BeautifulSoup as BS
import requests
import sys
  
  
class Window(QMainWindow):
  
    def __init__(self):
        super().__init__()
  
        # setting title
        self.setWindowTitle("Python ")
  
        # setting geometry
        self.setGeometry(100, 100, 400, 500)
  
        # calling method
        self.UiComponents()
  
        # showing all the widgets
        self.show()
  
    # method for widgets
    def UiComponents(self):
  
        # countries list // user can add other countries as well
        self.country = ["india", "us", "spain", "china", "russia", 
                            "pakistan", "nepal", "italy", "spain",
                                                   "uk", "brazil"]
  
        # creating a combo box widget
        self.combo_box = QComboBox(self)
  
        # setting geometry to combo box
        self.combo_box.setGeometry(100, 50, 200, 40)
  
        # setting font
        self.combo_box.setFont(QFont('Times', 10))
  
        # adding items to combo box
        for i in self.country:
            i = i.upper()
            self.combo_box.addItem(i)
  
        # adding action to the combo box
        self.combo_box.activated.connect(self.get_cases)
  
        # creating label to show the total cases
        self.label_total = QLabel("Total Cases ", self)
  
        # setting geometry
        self.label_total.setGeometry(100, 300, 200, 40)
  
        # setting alignment to the text
        self.label_total.setAlignment(Qt.AlignCenter)
  
        # adding border to the label
        self.label_total.setStyleSheet("border : 2px solid black;")
  
        # creating label to show the recovered cases
        self.label_reco = QLabel("Recovered Cases ", self)
  
        # setting geometry
        self.label_reco.setGeometry(100, 350, 200, 40)
  
        # setting alignment to the text
        self.label_reco.setAlignment(Qt.AlignCenter)
  
        # adding border
        self.label_reco.setStyleSheet("border : 2px solid black;")
  
        # creating label to show death cases
        self.label_death = QLabel("Total Deaths ", self)
  
        # setting geometry
        self.label_death.setGeometry(100, 400, 200, 40)
  
        # setting alignment to the text
        self.label_death.setAlignment(Qt.AlignCenter)
  
        # adding border to the label
        self.label_death.setStyleSheet("border : 2px solid black;")
  
  
    # method called by push
    def get_cases(self):
  
        # getting country name
        index = self.combo_box.currentIndex()
        country_name = self.country[index]
  
  
        # creating url using country name
        url = "https://www.worldometers.info/coronavirus/country/" + country_name + "/"
  
        # getting the request from url
        data = requests.get(url)
  
        # converting the text
        soup = BS(data.text, 'html.parser')
  
        # finding meta info for cases
        cases = soup.find_all("div", class_="maincounter-number")
  
        # getting total cases number
        total = cases[0].text
  
        # filtering it
        total = total[1: len(total) - 2]
  
        # getting recovered cases number
        recovered = cases[2].text
  
        # filtering it
        recovered = recovered[1: len(recovered) - 1]
  
        # getting death cases number
        deaths = cases[1].text
  
        # filtering it
        deaths = deaths[1: len(deaths) - 1]
  
        # show data through labels
        self.label_total.setText("Total Cases : " + total)
        self.label_reco.setText("Recovered Cases : " + recovered)
        self.label_death.setText("Total Deaths : " + deaths)
  
  
# create pyqt5 app
App = QApplication(sys.argv)
  
# create the instance of our Window
window = Window()
  
window.show()
  
# start the app
sys.exit(App.exec())

输出 :