用PYQT6写的天气预报程序

之前一直想做个天气预报程序,今天终于给他做好了,

效果图界面部分用PYQT6完成

UI界面


from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_WeatherForm(object):
    def setupUi(self, WeatherForm):
        WeatherForm.setObjectName("WeatherForm")
        WeatherForm.resize(605, 769)
        WeatherForm.setStyleSheet("QPushButton {\n"
                                  "background-color: rgba(255, 255, 255, 0); /* 背景颜色 */\n"
                                  "border:0px; /* 边框样式 */\n"
                                  "border-radius: 3px;         /* 圆角 */\n"
                                  "padding: 2px 4px;           /* 内边距 */\n"
                                  "color: white;               /* 文字颜色 */\n"
                                  "\n"
                                  "    }\n"
                                  "    QPushButton:hover {\n"
                                  "        background-color:rgba(0, 0, 0, 50);  /* 鼠标悬停时的背景颜色 */\n"
                                  "    }\n"
                                  "    QPushButton:pressed {\n"
                                  "        background-color: rgba(0, 0, 0, 150);  /* 按下时的背景颜色 */\n"
                                  "    }\n"
                                  "\n"
                                  "\n"
                                  "QLineEdit {\n"
                                  "        border-bottom-width: 0px;      /* 默认底部边框隐藏 */\n"
                                  "        border-style: solid;\n"
                                  "        padding: 30px;\n"
                                  "        background-color: #FFFFFF;\n"
                                  "        color: #000000;\n"
                                  "        border-bottom-width: 1px;      /* 获取焦点时底部边框宽度 */\n"
                                  "        border-bottom-color: rgb(172, 172, 172);     /* 获取焦点时底部边框颜色 */\n"
                                  "    }\n"
                                  "    QLineEdit:focus {\n"
                                  "        border-bottom-width: 1px;      /* 获取焦点时底部边框宽度 */\n"
                                  "        border-bottom-color: rgb(0, 170, 255);     /* 获取焦点时底部边框颜色 */\n"
                                  "        border-bottom-style: solid;    /* 获取焦点时底部边框样式 */\n"
                                  "    }\n"
                                  "\n"
                                  "\n"
                                  " QLabel {\n"
                                  "\n"
                                  "background-color: rgba(255, 255, 255, 0);\n"
                                  "color: rgb(255, 255, 255);\n"
                                  "   }")
        self.WeatherMain = QtWidgets.QFrame(parent=WeatherForm)
        self.WeatherMain.setGeometry(QtCore.QRect(80, 60, 430, 600))
        self.WeatherMain.setMinimumSize(QtCore.QSize(430, 330))
        self.WeatherMain.setMaximumSize(QtCore.QSize(430, 600))
        self.WeatherMain.setStyleSheet("QFrame {\n"
                                       "border-radius: 5px;\n"
                                       "background-color: qlineargradient(spread:pad, x1:1, y1:0.023, x2:0, y2:0.994, stop:0 rgba(105, 183, 206, 255), stop:1 rgba(63, 111, 118, 255));\n"
                                       "border: 0px solid rgb(100, 169, 139);\n"
                                       "   }")
        self.WeatherMain.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
        self.WeatherMain.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
        self.WeatherMain.setObjectName("WeatherMain")
        self.wid = QtWidgets.QLabel(parent=self.WeatherMain)
        self.wid.setGeometry(QtCore.QRect(0, -5, 430, 516))
        self.wid.setStyleSheet("image: url(:/weather/Weather/03.png);\n"
                               "background-color: rgba(255, 255, 255, 0);")
        self.wid.setText("")
        self.wid.setObjectName("wid")
        self.layoutWidget = QtWidgets.QWidget(parent=self.WeatherMain)
        self.layoutWidget.setGeometry(QtCore.QRect(0, 0, 432, 601))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout_5.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_5.setSpacing(0)
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.widget = QtWidgets.QWidget(parent=self.layoutWidget)
        self.widget.setMinimumSize(QtCore.QSize(430, 45))
        self.widget.setMaximumSize(QtCore.QSize(430, 45))
        self.widget.setObjectName("widget")
        self.layoutWidget_2 = QtWidgets.QWidget(parent=self.widget)
        self.layoutWidget_2.setGeometry(QtCore.QRect(0, 0, 431, 44))
        self.layoutWidget_2.setObjectName("layoutWidget_2")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.layoutWidget_2)
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_3.setSpacing(0)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                           QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setSpacing(0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.cityName = QtWidgets.QLineEdit(parent=self.layoutWidget_2)
        self.cityName.setMinimumSize(QtCore.QSize(150, 35))
        self.cityName.setMaximumSize(QtCore.QSize(150, 35))
        font = QtGui.QFont()
        font.setFamily("MiSans Medium")
        font.setPointSize(12)
        font.setBold(False)
        self.cityName.setFont(font)
        self.cityName.setStyleSheet("border-bottom-left-radius: 15px;  /* 左上角圆角 */\n"
                                    "border-top-left-radius: 15px;  /* 左上角圆角 */\n"
                                    "background-color: rgba(100, 100, 100, 100);\n"
                                    "color: rgb(255, 255, 255);\n"
                                    "border: 0px solid rgb(100, 169, 139);\n"
                                    "")
        self.cityName.setObjectName("cityName")
        self.horizontalLayout.addWidget(self.cityName)
        self.query = QtWidgets.QPushButton(parent=self.layoutWidget_2)
        self.query.setMinimumSize(QtCore.QSize(45, 35))
        self.query.setMaximumSize(QtCore.QSize(45, 35))
        self.query.setStyleSheet("\n"
                                 "\n"
                                 "QPushButton {\n"
                                 "background-color:rgb(0, 170, 255);\n"
                                 "border-top-right-radius: 15px; /* 右上角圆角 */\n"
                                 "border-bottom-right-radius: 15px; /* 右上角圆角 */\n"
                                 "border-bottom-left-radius: 0px;  /* 左上角圆角 */\n"
                                 "border-top-left-radius: 0px;  /* 左上角圆角 */\n"
                                 "border: 0px ;\n"
                                 " }\n"
                                 "QPushButton:hover {\n"
                                 "background-color:rgb(0, 145, 218);  /* 鼠标悬停时的背景颜色 */\n"
                                 "\n"
                                 "}\n"
                                 "    QPushButton:pressed {\n"
                                 "        background-color: rgb(0, 113, 170);  /* 按下时的背景颜色 */\n"
                                 "    }")
        self.query.setText("")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/icon_white/icon/icon_white/sousuo.png"), QtGui.QIcon.Mode.Normal,
                       QtGui.QIcon.State.Off)
        self.query.setIcon(icon)
        self.query.setObjectName("query")
        self.horizontalLayout.addWidget(self.query)
        self.horizontalLayout_3.addLayout(self.horizontalLayout)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_3.addItem(spacerItem1)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setSpacing(0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.addButton = QtWidgets.QPushButton(parent=self.layoutWidget_2)
        self.addButton.setMinimumSize(QtCore.QSize(40, 40))
        self.addButton.setMaximumSize(QtCore.QSize(40, 40))
        self.addButton.setStyleSheet("QPushButton:hover {\n"
                                     "background-color: rgba(170, 0, 0, 150);  /* 鼠标悬停时的背景颜色 */\n"
                                     "}\n"
                                     "QPushButton:pressed {\n"
                                     "background-color: rgba(170, 0, 0, 250);  /* 按下时的背景颜色 */\n"
                                     "}")
        self.addButton.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(":/icon_white/icon/icon_white/jiahao1.png"), QtGui.QIcon.Mode.Normal,
                        QtGui.QIcon.State.Off)
        self.addButton.setIcon(icon1)
        self.addButton.setIconSize(QtCore.QSize(30, 30))
        self.addButton.setObjectName("addButton")
        self.horizontalLayout_2.addWidget(self.addButton)
        self.setButton = QtWidgets.QPushButton(parent=self.layoutWidget_2)
        self.setButton.setMinimumSize(QtCore.QSize(40, 40))
        self.setButton.setMaximumSize(QtCore.QSize(40, 40))
        self.setButton.setStyleSheet("QPushButton:hover {\n"
                                     "background-color: rgba(170, 0, 0, 150);  /* 鼠标悬停时的背景颜色 */\n"
                                     "}\n"
                                     "QPushButton:pressed {\n"
                                     "background-color: rgba(170, 0, 0, 250);  /* 按下时的背景颜色 */\n"
                                     "}")
        self.setButton.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap(":/icon_white/icon/icon_white/others.png"), QtGui.QIcon.Mode.Normal,
                        QtGui.QIcon.State.Off)
        self.setButton.setIcon(icon2)
        self.setButton.setIconSize(QtCore.QSize(30, 30))
        self.setButton.setObjectName("setButton")
        self.horizontalLayout_2.addWidget(self.setButton)
        self.CloseButton = QtWidgets.QPushButton(parent=self.layoutWidget_2)
        self.CloseButton.setMinimumSize(QtCore.QSize(40, 40))
        self.CloseButton.setMaximumSize(QtCore.QSize(40, 40))
        self.CloseButton.setStyleSheet("QPushButton:hover {\n"
                                       "background-color: rgba(170, 0, 0, 150);  /* 鼠标悬停时的背景颜色 */\n"
                                       "}\n"
                                       "QPushButton:pressed {\n"
                                       "background-color: rgba(170, 0, 0, 250);  /* 按下时的背景颜色 */\n"
                                       "}")
        self.CloseButton.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap(":/icon_white/icon/icon_white/guanbi1.png"), QtGui.QIcon.Mode.Normal,
                        QtGui.QIcon.State.Off)
        self.CloseButton.setIcon(icon3)
        self.CloseButton.setIconSize(QtCore.QSize(30, 30))
        self.CloseButton.setObjectName("CloseButton")
        self.horizontalLayout_2.addWidget(self.CloseButton)
        self.horizontalLayout_3.addLayout(self.horizontalLayout_2)
        self.verticalLayout_5.addWidget(self.widget)
        self.widget_2 = QtWidgets.QWidget(parent=self.layoutWidget)
        self.widget_2.setMinimumSize(QtCore.QSize(430, 370))
        self.widget_2.setObjectName("widget_2")
        self.layoutWidget_3 = QtWidgets.QWidget(parent=self.widget_2)
        self.layoutWidget_3.setGeometry(QtCore.QRect(5, 150, 421, 189))
        self.layoutWidget_3.setObjectName("layoutWidget_3")
        self.horizontalLayout_11 = QtWidgets.QHBoxLayout(self.layoutWidget_3)
        self.horizontalLayout_11.setContentsMargins(30, 0, 0, 0)
        self.horizontalLayout_11.setSpacing(0)
        self.horizontalLayout_11.setObjectName("horizontalLayout_11")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout()
        self.verticalLayout_2.setSpacing(0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.temperature = QtWidgets.QLabel(parent=self.layoutWidget_3)
        font = QtGui.QFont()
        font.setFamily("MiSans ExtraLight")
        font.setPointSize(72)
        font.setBold(False)
        self.temperature.setFont(font)
        self.temperature.setStyleSheet("background-color: rgba(255, 255, 255, 0);\n"
                                       "")
        self.temperature.setObjectName("temperature")
        self.verticalLayout_2.addWidget(self.temperature)
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setSpacing(0)
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setSpacing(0)
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.info = QtWidgets.QLabel(parent=self.layoutWidget_3)
        self.info.setMinimumSize(QtCore.QSize(80, 0))
        font = QtGui.QFont()
        font.setFamily("MiSans Demibold")
        font.setPointSize(18)
        font.setBold(True)
        self.info.setFont(font)
        self.info.setStyleSheet("background-color: rgba(255, 255, 255, 0);\n"
                                "")
        self.info.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.info.setObjectName("info")
        self.verticalLayout_3.addWidget(self.info)
        self.power = QtWidgets.QLabel(parent=self.layoutWidget_3)
        self.power.setMinimumSize(QtCore.QSize(80, 0))
        font = QtGui.QFont()
        font.setFamily("MiSans Light")
        font.setPointSize(12)
        self.power.setFont(font)
        self.power.setStyleSheet("background-color: rgba(255, 255, 255, 0);\n"
                                 "")
        self.power.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.power.setObjectName("power")
        self.verticalLayout_3.addWidget(self.power)
        self.horizontalLayout_4.addLayout(self.verticalLayout_3)
        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.aqi = QtWidgets.QLabel(parent=self.layoutWidget_3)
        self.aqi.setMinimumSize(QtCore.QSize(80, 0))
        font = QtGui.QFont()
        font.setFamily("MiSans")
        font.setPointSize(12)
        font.setBold(False)
        self.aqi.setFont(font)
        self.aqi.setStyleSheet("background-color: rgba(255, 255, 255, 0);\n"
                               "")
        self.aqi.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.aqi.setObjectName("aqi")
        self.verticalLayout.addWidget(self.aqi)
        self.humidity = QtWidgets.QLabel(parent=self.layoutWidget_3)
        self.humidity.setMinimumSize(QtCore.QSize(80, 0))
        font = QtGui.QFont()
        font.setFamily("MiSans")
        font.setPointSize(12)
        self.humidity.setFont(font)
        self.humidity.setStyleSheet("background-color: rgba(255, 255, 255, 0);\n"
                                    "")
        self.humidity.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.humidity.setObjectName("humidity")
        self.verticalLayout.addWidget(self.humidity)
        self.horizontalLayout_4.addLayout(self.verticalLayout)
        self.verticalLayout_2.addLayout(self.horizontalLayout_4)
        self.horizontalLayout_11.addLayout(self.verticalLayout_2)
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_11.addItem(spacerItem2)
        self.city = QtWidgets.QLabel(parent=self.widget_2)
        self.city.setGeometry(QtCore.QRect(30, 50, 156, 26))
        font = QtGui.QFont()
        font.setFamily("MiSans")
        font.setPointSize(16)
        font.setBold(False)
        self.city.setFont(font)
        self.city.setStyleSheet("background-color: rgba(255, 255, 255, 0);\n"
                                "image: url(:/icon_white/icon/icon_white/xiangxia1.png);\n"
                                "")
        self.city.setObjectName("city")
        self.verticalLayout_5.addWidget(self.widget_2)
        self.widget_3 = QtWidgets.QWidget(parent=self.layoutWidget)
        self.widget_3.setStyleSheet("QLabel { background-color: rgba(255, 255, 255, 0); }\n"
                                    "")
        self.widget_3.setObjectName("widget_3")
        self.layoutWidget_4 = QtWidgets.QWidget(parent=self.widget_3)
        self.layoutWidget_4.setGeometry(QtCore.QRect(5, 15, 416, 146))
        self.layoutWidget_4.setObjectName("layoutWidget_4")
        self.horizontalLayout_17 = QtWidgets.QHBoxLayout(self.layoutWidget_4)
        self.horizontalLayout_17.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_17.setSpacing(5)
        self.horizontalLayout_17.setObjectName("horizontalLayout_17")
        self.Day1 = QtWidgets.QHBoxLayout()
        self.Day1.setSpacing(0)
        self.Day1.setObjectName("Day1")
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setSpacing(0)
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.date1 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.date1.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.date1.setObjectName("date1")
        self.verticalLayout_4.addWidget(self.date1)
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setSpacing(0)
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_5.addItem(spacerItem3)
        self.wid_day1 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.wid_day1.setMinimumSize(QtCore.QSize(50, 50))
        self.wid_day1.setMaximumSize(QtCore.QSize(50, 50))
        self.wid_day1.setSizeIncrement(QtCore.QSize(0, 0))
        self.wid_day1.setStyleSheet("border-image: url(:/weathermini/Weather/weather1/00.png);")
        self.wid_day1.setText("")
        self.wid_day1.setObjectName("wid_day1")
        self.horizontalLayout_5.addWidget(self.wid_day1)
        spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_5.addItem(spacerItem4)
        self.verticalLayout_4.addLayout(self.horizontalLayout_5)
        self.Temperature1 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.Temperature1.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.Temperature1.setObjectName("Temperature1")
        self.verticalLayout_4.addWidget(self.Temperature1)
        self.weather1 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.weather1.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.weather1.setObjectName("weather1")
        self.verticalLayout_4.addWidget(self.weather1)
        self.direct1 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.direct1.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.direct1.setObjectName("direct1")
        self.verticalLayout_4.addWidget(self.direct1)
        self.Day1.addLayout(self.verticalLayout_4)
        self.line1 = QtWidgets.QFrame(parent=self.layoutWidget_4)
        self.line1.setMaximumSize(QtCore.QSize(1, 16777215))
        self.line1.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.line1.setFrameShape(QtWidgets.QFrame.Shape.VLine)
        self.line1.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
        self.line1.setObjectName("line1")
        self.Day1.addWidget(self.line1)
        self.horizontalLayout_17.addLayout(self.Day1)
        self.Day2 = QtWidgets.QHBoxLayout()
        self.Day2.setSpacing(0)
        self.Day2.setObjectName("Day2")
        self.verticalLayout_10 = QtWidgets.QVBoxLayout()
        self.verticalLayout_10.setSpacing(0)
        self.verticalLayout_10.setObjectName("verticalLayout_10")
        self.date2 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.date2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.date2.setObjectName("date2")
        self.verticalLayout_10.addWidget(self.date2)
        self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_14.setSpacing(0)
        self.horizontalLayout_14.setObjectName("horizontalLayout_14")
        spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_14.addItem(spacerItem5)
        self.wid_day2 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.wid_day2.setMinimumSize(QtCore.QSize(50, 50))
        self.wid_day2.setMaximumSize(QtCore.QSize(50, 50))
        self.wid_day2.setSizeIncrement(QtCore.QSize(0, 0))
        self.wid_day2.setStyleSheet("border-image: url(:/weathermini/Weather/weather1/01.png);")
        self.wid_day2.setText("")
        self.wid_day2.setObjectName("wid_day2")
        self.horizontalLayout_14.addWidget(self.wid_day2)
        spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_14.addItem(spacerItem6)
        self.verticalLayout_10.addLayout(self.horizontalLayout_14)
        self.Temperature2 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.Temperature2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.Temperature2.setObjectName("Temperature2")
        self.verticalLayout_10.addWidget(self.Temperature2)
        self.weather2 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.weather2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.weather2.setObjectName("weather2")
        self.verticalLayout_10.addWidget(self.weather2)
        self.direct2 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.direct2.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.direct2.setObjectName("direct2")
        self.verticalLayout_10.addWidget(self.direct2)
        self.Day2.addLayout(self.verticalLayout_10)
        self.line2 = QtWidgets.QFrame(parent=self.layoutWidget_4)
        self.line2.setMaximumSize(QtCore.QSize(1, 16777215))
        self.line2.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.line2.setFrameShape(QtWidgets.QFrame.Shape.VLine)
        self.line2.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
        self.line2.setObjectName("line2")
        self.Day2.addWidget(self.line2)
        self.horizontalLayout_17.addLayout(self.Day2)
        self.Day3 = QtWidgets.QHBoxLayout()
        self.Day3.setSpacing(0)
        self.Day3.setObjectName("Day3")
        self.verticalLayout_11 = QtWidgets.QVBoxLayout()
        self.verticalLayout_11.setSpacing(0)
        self.verticalLayout_11.setObjectName("verticalLayout_11")
        self.date3 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.date3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.date3.setObjectName("date3")
        self.verticalLayout_11.addWidget(self.date3)
        self.horizontalLayout_16 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_16.setSpacing(0)
        self.horizontalLayout_16.setObjectName("horizontalLayout_16")
        spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_16.addItem(spacerItem7)
        self.wid_day3 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.wid_day3.setMinimumSize(QtCore.QSize(50, 50))
        self.wid_day3.setMaximumSize(QtCore.QSize(50, 50))
        self.wid_day3.setSizeIncrement(QtCore.QSize(0, 0))
        self.wid_day3.setStyleSheet("border-image: url(:/weathermini/Weather/weather1/02.png);")
        self.wid_day3.setText("")
        self.wid_day3.setObjectName("wid_day3")
        self.horizontalLayout_16.addWidget(self.wid_day3)
        spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_16.addItem(spacerItem8)
        self.verticalLayout_11.addLayout(self.horizontalLayout_16)
        self.Temperature3 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.Temperature3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.Temperature3.setObjectName("Temperature3")
        self.verticalLayout_11.addWidget(self.Temperature3)
        self.weather3 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.weather3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.weather3.setObjectName("weather3")
        self.verticalLayout_11.addWidget(self.weather3)
        self.direct3 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.direct3.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.direct3.setObjectName("direct3")
        self.verticalLayout_11.addWidget(self.direct3)
        self.Day3.addLayout(self.verticalLayout_11)
        self.line3 = QtWidgets.QFrame(parent=self.layoutWidget_4)
        self.line3.setMaximumSize(QtCore.QSize(1, 16777215))
        self.line3.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.line3.setFrameShape(QtWidgets.QFrame.Shape.VLine)
        self.line3.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
        self.line3.setObjectName("line3")
        self.Day3.addWidget(self.line3)
        self.horizontalLayout_17.addLayout(self.Day3)
        self.Day4 = QtWidgets.QHBoxLayout()
        self.Day4.setSpacing(0)
        self.Day4.setObjectName("Day4")
        self.verticalLayout_8 = QtWidgets.QVBoxLayout()
        self.verticalLayout_8.setSpacing(0)
        self.verticalLayout_8.setObjectName("verticalLayout_8")
        self.date4 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.date4.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.date4.setObjectName("date4")
        self.verticalLayout_8.addWidget(self.date4)
        self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_10.setSpacing(0)
        self.horizontalLayout_10.setObjectName("horizontalLayout_10")
        spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                            QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_10.addItem(spacerItem9)
        self.wid_day4 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.wid_day4.setMinimumSize(QtCore.QSize(50, 50))
        self.wid_day4.setMaximumSize(QtCore.QSize(50, 50))
        self.wid_day4.setSizeIncrement(QtCore.QSize(0, 0))
        self.wid_day4.setStyleSheet("border-image: url(:/weathermini/Weather/weather1/03.png);")
        self.wid_day4.setText("")
        self.wid_day4.setObjectName("wid_day4")
        self.horizontalLayout_10.addWidget(self.wid_day4)
        spacerItem10 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                             QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_10.addItem(spacerItem10)
        self.verticalLayout_8.addLayout(self.horizontalLayout_10)
        self.Temperature4 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.Temperature4.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.Temperature4.setObjectName("Temperature4")
        self.verticalLayout_8.addWidget(self.Temperature4)
        self.weather4 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.weather4.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.weather4.setObjectName("weather4")
        self.verticalLayout_8.addWidget(self.weather4)
        self.direct4 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.direct4.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.direct4.setObjectName("direct4")
        self.verticalLayout_8.addWidget(self.direct4)
        self.Day4.addLayout(self.verticalLayout_8)
        self.line4 = QtWidgets.QFrame(parent=self.layoutWidget_4)
        self.line4.setMaximumSize(QtCore.QSize(1, 16777215))
        self.line4.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.line4.setFrameShape(QtWidgets.QFrame.Shape.VLine)
        self.line4.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
        self.line4.setObjectName("line4")
        self.Day4.addWidget(self.line4)
        self.horizontalLayout_17.addLayout(self.Day4)
        self.Day5 = QtWidgets.QHBoxLayout()
        self.Day5.setSpacing(0)
        self.Day5.setObjectName("Day5")
        self.verticalLayout_9 = QtWidgets.QVBoxLayout()
        self.verticalLayout_9.setSpacing(0)
        self.verticalLayout_9.setObjectName("verticalLayout_9")
        self.date5 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.date5.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.date5.setObjectName("date5")
        self.verticalLayout_9.addWidget(self.date5)
        self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_12.setSpacing(0)
        self.horizontalLayout_12.setObjectName("horizontalLayout_12")
        spacerItem11 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                             QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_12.addItem(spacerItem11)
        self.wid_day5 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.wid_day5.setMinimumSize(QtCore.QSize(50, 50))
        self.wid_day5.setMaximumSize(QtCore.QSize(50, 50))
        self.wid_day5.setSizeIncrement(QtCore.QSize(0, 0))
        self.wid_day5.setStyleSheet("border-image: url(:/weathermini/Weather/weather1/20.png);")
        self.wid_day5.setText("")
        self.wid_day5.setObjectName("wid_day5")
        self.horizontalLayout_12.addWidget(self.wid_day5)
        spacerItem12 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding,
                                             QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_12.addItem(spacerItem12)
        self.verticalLayout_9.addLayout(self.horizontalLayout_12)
        self.Temperature5 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.Temperature5.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.Temperature5.setObjectName("Temperature5")
        self.verticalLayout_9.addWidget(self.Temperature5)
        self.weather5 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.weather5.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.weather5.setObjectName("weather5")
        self.verticalLayout_9.addWidget(self.weather5)
        self.direct5 = QtWidgets.QLabel(parent=self.layoutWidget_4)
        self.direct5.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
        self.direct5.setObjectName("direct5")
        self.verticalLayout_9.addWidget(self.direct5)
        self.Day5.addLayout(self.verticalLayout_9)
        self.horizontalLayout_17.addLayout(self.Day5)
        self.verticalLayout_5.addWidget(self.widget_3)

        self.retranslateUi(WeatherForm)
        QtCore.QMetaObject.connectSlotsByName(WeatherForm)

    def retranslateUi(self, WeatherForm):
        _translate = QtCore.QCoreApplication.translate
        WeatherForm.setWindowTitle(_translate("WeatherForm", "Form"))
        self.cityName.setWhatsThis(_translate("WeatherForm", "<html><head/><body><p><br/></p></body></html>"))
        self.cityName.setText(_translate("WeatherForm", "杭州"))
        self.query.setToolTip(_translate("WeatherForm", "<html><head/><body><p>搜索</p></body></html>"))
        self.addButton.setToolTip(_translate("WeatherForm", "<html><head/><body><p>增加</p></body></html>"))
        self.setButton.setToolTip(_translate("WeatherForm", "<html><head/><body><p>设置</p></body></html>"))
        self.CloseButton.setToolTip(_translate("WeatherForm", "<html><head/><body><p>关闭</p></body></html>"))
        self.temperature.setText(_translate("WeatherForm", "35°"))
        self.info.setText(_translate("WeatherForm", "晴"))
        self.power.setText(_translate("WeatherForm", "2级"))
        self.aqi.setText(_translate("WeatherForm", "空气质量"))
        self.humidity.setText(_translate("WeatherForm", "湿度"))
        self.city.setText(_translate("WeatherForm", "杭州市"))
        self.date1.setText(_translate("WeatherForm", "今天"))
        self.Temperature1.setText(_translate("WeatherForm", "28/37℃"))
        self.weather1.setText(_translate("WeatherForm", "雷阵雨转晴"))
        self.direct1.setText(_translate("WeatherForm", "西北风"))
        self.date2.setText(_translate("WeatherForm", "明天"))
        self.Temperature2.setText(_translate("WeatherForm", "28/37℃"))
        self.weather2.setText(_translate("WeatherForm", "雷阵雨转晴"))
        self.direct2.setText(_translate("WeatherForm", "西北风"))
        self.date3.setText(_translate("WeatherForm", "今天"))
        self.Temperature3.setText(_translate("WeatherForm", "28/37℃"))
        self.weather3.setText(_translate("WeatherForm", "雷阵雨转晴"))
        self.direct3.setText(_translate("WeatherForm", "西北风"))
        self.date4.setText(_translate("WeatherForm", "今天"))
        self.Temperature4.setText(_translate("WeatherForm", "28/37℃"))
        self.weather4.setText(_translate("WeatherForm", "雷阵雨转晴"))
        self.direct4.setText(_translate("WeatherForm", "西北风"))
        self.date5.setText(_translate("WeatherForm", "今天"))
        self.Temperature5.setText(_translate("WeatherForm", "28/37℃"))
        self.weather5.setText(_translate("WeatherForm", "雷阵雨转晴"))
        self.direct5.setText(_translate("WeatherForm", "西北风"))

然后时程序代码,超简单

import sys
from pprint import pprint

import requests
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.QtGui import QPixmap
from ui.BorderlessWindow import BorderlessWindow
from ui.weatherUI import Ui_WeatherForm

# 定义一个名为 WeatherTestFrom1 的类,继承自 BorderlessWindow 类
class WeatherTestFrom(BorderlessWindow):
    # 构造函数
    def __init__(self):
        # 调用父类的构造函数
        super().__init__()
        # 初始化 Ui_WeatherForm 类的实例
        self.ui = Ui_WeatherForm()
        # 设置界面布局
        self.ui.setupUi(self)

        # 为关闭按钮添加点击事件,点击时关闭窗口
        self.ui.CloseButton.clicked.connect(self.close)

        # 将搜索框默认显示为"杭州"
        self.ui.cityName.setText("杭州")

        # 设置 API 的 URL 和密钥
        self.apiUrl = 'http://apis.juhe.cn/simpleWeather/query'
        self.apiKey = '这里换成自己的apikey'

        # 为查询按钮绑定点击事件,触发更新天气数据的方法
        self.ui.query.clicked.connect(self.update_weather_data)

        # 在这里调用 update_weather_data 方法以在启动时加载默认城市的天气数据
        self.update_weather_data()


    # 定义更新天气数据的方法
    def update_weather_data(self):
        # 获取输入的城市名称
        city_name = self.ui.cityName.text()
        # 构建请求参数
        params = {
            'key': self.apiKey,
            'city': city_name
        }
        # 发送 GET 请求获取天气数据
        response = requests.get(self.apiUrl, params=params)
        # 如果响应状态码为 200,表示请求成功
        print(response.status_code)
        if response.status_code == 200:
            # 将响应数据解析为 JSON 格式,并获取 result 字段的数据
            data = response.json().get('result')
            # 如果获取到了数据
            if data:
                # 更新实时天气信息
                self.update_realtime_weather(data['realtime'])

                # 更新未来天气预报
                self.update_forecast_weather(data['future'])

                # 更新 city 控件(假设它存在)的文本为输入的城市名称
                if hasattr(self.ui, 'city'):
                    self.ui.city.setText(city_name)
            pprint(data)
    # 定义更新实时天气信息的方法
    def update_realtime_weather(self, realtime_data):
        # 更新 AQI 信息
        self.ui.aqi.setText(realtime_data['aqi'])
        #self.ui.direct.setText(realtime_data['direct'])
        # 更新天气信息
        self.ui.info.setText(realtime_data['info'])
        # 更新湿度信息
        self.ui.humidity.setText(realtime_data['humidity'])
        # 更新风力信息
        self.ui.power.setText(realtime_data['power'])
        # 根据实时天气的 wid 加载图片
        pixmap = QPixmap(f'res/Weather/{realtime_data["wid"]}.png')

        # 将图片设置到 wid 控件,并进行缩放适配
        self.ui.wid.setPixmap(
            pixmap.scaledToWidth(self.ui.wid.width(), mode=Qt.TransformationMode.SmoothTransformation))

    # 定义更新未来天气预报的方法
    def update_forecast_weather(self, forecast_data):
        # 遍历未来天气预报数据
        for i, day in enumerate(forecast_data):
            # 获取对应的日期、风向、温度、天气和图标控件
            date_ui = getattr(self.ui, f'date{i+1}')
            direct_ui = getattr(self.ui, f'direct{i+1}')
            temperature_ui = getattr(self.ui, f'Temperature{i+1}')
            weather_ui = getattr(self.ui, f'weather{i+1}')
            wid_day_ui = getattr(self.ui, f'wid_day{i+1}')

            # 设置日期控件的文本
            date_ui.setText(day['date'])
            # 设置风向控件的文本
            direct_ui.setText(day['direct'])
            # 设置温度控件的文本
            temperature_ui.setText(day['temperature'])
            # 设置天气控件的文本
            weather_ui.setText(day['weather'])
            # 加载并显示未来天气的图标
            pixmap = QPixmap(f'res/Weather/{day["wid"]["day"]}.png')
            wid_day_ui.setPixmap(
                pixmap.scaledToWidth(wid_day_ui.width(), mode=Qt.TransformationMode.SmoothTransformation))

# 如果当前模块是主程序
if __name__ == "__main__":
    # 创建 QApplication 实例
    app = QApplication(sys.argv)
    # 创建 WeatherTestFrom1 类的实例
    window = WeatherTestFrom()
    # 显示窗口
    window.show()
    # 执行应用程序,直到退出
    sys.exit(app.exec())

要使用PyQt获取城市天气预报,可以通过以下步骤实现: 1. 首先,需要获取天气数据。可以使用爬虫方式获取天气网站的HTML页面,然后使用解析库(如BeautifulSoup)解析内容。另一种方法是使用天气预报网站提供的API接口直接获取结构化的数据,省去了解析HTML的工作。在这个例子中,我们选择使用中国天气网站提供的API接口\[2\]。 2. 使用PyQt创建一个界面,用于显示天气预报信息。可以使用PyQt的各种控件来设计界面,如标签、文本框等。在这个例子中,我们可以创建一个标签用于显示城市名,一个标签用于显示温度,一个标签用于显示风向等。 3. 在PyQt的主窗口类中,编代码来获取天气数据并将其显示在界面上。可以使用requests库发送HTTP请求来获取天气数据\[3\]。然后,从返回的JSON数据中提取所需的天气信息,并将其设置到相应的标签中。 4. 最后,将界面文件转为.py文件,并调用主窗口类来显示界面。 通过以上步骤,我们可以实现一个使用PyQt获取城市天气预报程序。 #### 引用[.reference_title] - *1* *3* [PyQt5快速开发与实战 10.1 获取城市天气预报](https://blog.csdn.net/weixin_44226181/article/details/126083561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [PyQt 5实战之城市天气预报](https://blog.csdn.net/qq_32019341/article/details/109564001)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值