之前一直想做个天气预报程序,今天终于给他做好了,
效果图界面部分用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())