基于PyQt5的图形化界面开发——天气应用

目录

  • 0. 前言
  • 1. 注册心知天气
  • 2. 代码实现
  • 3. 其他PyQt5文章

0. 前言

本节使用PyQt5开发天气应用程序实现以下功能:

通过调用天气API获取实时天气数据,并在应用程序中显示当前城市的温度、天气状况、风速等信息。

操作系统:Windows10 专业版

开发环境:Pycahrm Comunity 2022.3

Python解释器版本:Python3.8

第三方库:PyQt5,requests

1. 注册心知天气

你需要注册心知天气,获取API-key用来调用心知天气接口来获取天气信息
心知天气官网

注册好后,将私钥填写到你的代码中即可完成调用

在这里插入图片描述

你可以运行这段代码测试是否填写正确:

import requestsapi_key = '你的api-key'
api_url = f'https://api.seniverse.com/v3/weather/now.json?key={api_key}&location=北京&language=zh-Hans&unit=c'response = requests.get(api_url)
data = response.json()city_name = data['results'][0]['location']['name']
weather = data['results'][0]['now']['text']
temp_c = data['results'][0]['now']['temperature']print(f'城市:{city_name}')
print(f'天气:{weather}')
print(f'温度:{temp_c}°C')

以下是北京和九江的测试:
在这里插入图片描述

在这里插入图片描述

2. 代码实现

注意修改API-key:

import sys
import requests
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayoutclass WeatherApp(QWidget):def __init__(self):super().__init__()self.setWindowTitle('天气应用')self.setGeometry(100, 100, 300, 100)self.city_label = QLabel('城市:', self)self.weather_label = QLabel('天气:', self)self.temp_label = QLabel('温度:', self)layout = QVBoxLayout(self)layout.addWidget(self.city_label)layout.addWidget(self.weather_label)layout.addWidget(self.temp_label)self.get_weather('北京')  # 默认显示北京的天气信息def get_weather(self, city):api_key = '你的api-key'api_url = f'https://api.seniverse.com/v3/weather/now.json?key={api_key}&location={city}&language=zh-Hans&unit=c'response = requests.get(api_url)data = response.json()city_name = data['results'][0]['location']['name']weather = data['results'][0]['now']['text']temp_c = data['results'][0]['now']['temperature']self.city_label.setText(f'城市:{city_name}')self.weather_label.setText(f'天气:{weather}')self.temp_label.setText(f'温度:{temp_c}°C')if __name__ == '__main__':app = QApplication(sys.argv)weather_app = WeatherApp()weather_app.show()sys.exit(app.exec_())

运行后效果如下:
在这里插入图片描述

这份代码只是在应用程序启动时获取一次天气信息并显示在界面上,并没有实现实时更新的功能。

接下来我们来使用PyQt5的定时器实现实时更新功能:

import sys
import requests
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *class WeatherApp(QWidget):def __init__(self):super().__init__()self.setWindowTitle('天气应用')width = 100high = 100self.setGeometry(1920 - 2 * width, 1080 - 2 * high, width, high)self.city_label = QLabel('城市:', self)self.weather_label = QLabel('天气:', self)self.temp_label = QLabel('温度:', self)layout = QVBoxLayout(self)layout.addWidget(self.city_label)layout.addWidget(self.weather_label)layout.addWidget(self.temp_label)self.timer = QTimer(self)self.timer.timeout.connect(self.update_weather)self.timer.start(600000)  # 每隔10分钟更新一次,单位为毫秒self.update_weather('九江')  # 显示九江的天气信息# 隐藏任务栏图标self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.FramelessWindowHint)# # 设置窗口背景透明# self.setWindowOpacity(0.5)  # 设置窗口透明度# self.setAttribute(Qt.WA_TranslucentBackground)  # 设置窗口背景透明def update_weather(self, city):api_key = '你的api-key'api_url = f'https://api.seniverse.com/v3/weather/now.json?key={api_key}&location={city}&language=zh-Hans&unit=c'response = requests.get(api_url)data = response.json()city_name = data['results'][0]['location']['name']weather = data['results'][0]['now']['text']temp_c = data['results'][0]['now']['temperature']self.city_label.setText(f'城市:{city_name}')self.weather_label.setText(f'天气:{weather}')self.temp_label.setText(f'温度:{temp_c}°C')if __name__ == '__main__':app = QApplication(sys.argv)weather_app = WeatherApp()weather_app.show()sys.exit(app.exec_())

代码使用了QTimer类创建了一个定时器,并通过连接timeout信号将update_weather函数与定时器关联起来。

在每个定时器的时间到达时,会触发timeout信号,从而调用update_weather函数来更新天气信息。

我取消了小图标和选项卡,为的是让它更简洁和方便:
在这里插入图片描述
它将永远处在屏幕右下方,并且每隔十分钟就会更新一次,你可以将这个实用(没用)的小工具设置开机自启动:
在这里插入图片描述

3. 其他PyQt5文章

基于PyQt5的图形化界面开发——自制MQTT客户端

基于PyQt5的图形化界面开发——Windows内存资源监视助手[附带编译exe教程]

基于PyQt5的图形化界面开发——模拟医院管理系统

基于PyQt5的图形化界面开发——自制ssh工具

基于PyQt5的图形化界面开发——PyQt示例_计算器

基于PyQt5的图形化界面开发——PyQt示例_扫雷

基于PyQt5的图形化界面开发——自制Redis图形化客户端(文末附源码)

基于PyQt5的图形化界面开发——堆栈动画演示

基于PyQt5的图形化界面开发——队列动画演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/2098.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ps htop 输出可读文件

需要安装sudo apt-get install aha echo q | ps auxf | aha --black --line-fix > psps.html echo q | htop | aha --black --line-fix > htop.html 使用浏览器打开

MYSQL 数据清理磁盘没变小问题解决方法

我们到数据目录查看有些表比较大,清理了一些无用数据后发现,文件大小不变。这是mysql的机制导致的。 解决方法:重建索引释放空间。 alter table $TABLE engineInnoDB;

代码随想录算法训练营第五十二天|300.最长递增子序列、 674. 最长连续递增序列、 718. 最长重复子数组

最长递增子序列 dp[i]的定义dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度状态转移方程 位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 1 的最大值。 所以:if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1);dp[i]的初始化 每一…

DETR系列:RT-DETR(一) 论文解析

论文:《DETRs Beat YOLOs on Real-time Object Detection》 2023.4 DETRs Beat YOLOs on Real-time Object Detection:https://arxiv.org/pdf/2304.08069.pdf 源码地址:https://github.com/PaddlePaddle/PaddleDetection/tree/develop/conf…

项目——学生信息管理系统7

目录 学生选课功能的介绍 把 课程的数据库表创建出来 创建实体类 创建添加课程页面 AddCourseFrm,注意创建成JInternalFrame类型 页面制作,具体参照之前的 回到 MainFrm 添加课程管理菜单项 给添加课程按钮绑定事件 回到AddCourseFrm 页面 1. 把…

Solid Converter PDF v10 安装及使用教程

目录 一、软件介绍二、下载教程三、安装教程四、使用教程1.PDF转Word、Html等2.合并PDF文件 一、软件介绍 Solid Converter PDF是一套专门将PDF文件转换成Word的软件。 能够将PDF转换为Word、Excel、HTML、PowerPoint、纯文本文件从PDF文档中提取数据并以CSV等格式保存能够转…

CENTOS上的网络安全工具(二十四)Windows下的Hadoop+Spark编程环境构建

前面我们搭建了hadoop集群,spark集群,也利用容器构建了spark的编程环境。但是一般来说,就并行计算程序的开发,一刚开始一般是在单机上的,比如hadoop的single node。但是老师弄个容器或虚拟机用vscode远程访问式开发&am…

Android13 安装最新版 Frida

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删! Android13 安装最新版 Frida 环境 win10Pixel4Android13Python3.9Frida1…

POI合并单元格设置单元格样式

文章目录 设置居中设置背景颜色设置边框设置字体合并单元格实际使用运行效果 设置居中 CellStyle centerStyle wb.createCellStyle();centerStyle.setAlignment(HorizontalAlignment.CENTER); // 居中centerStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中设…

CV什么时候能迎来ChatGPT时刻?

卷友们好,我是rumor。 最近看了几篇CV的工作,肉眼就感受到了CVer们对于大一统模型的“焦虑”。 这份焦虑让他们开始尝试统一一切,比如: 统一复杂的自动驾驶任务的优化目标[1],来自今年CVPR最佳论文。统一典型的CV任务&…

机器学习——深度学习

1 感知机 y f ( ∑ i 1 n w i x i − b ) yf(\sum\limits_{i1}^{n}w_ix_i-b) yf(i1∑n​wi​xi​−b) 其中, f f f 常常取阶跃函数或 Sigmoid 函数。 学习规则: Δ w i η ( y − y ^ ) x i w i ← w i Δ w i \Delta w_i\eta(y-\hat{y})x_i\\ w_i…

【网络】网络基础

🐱作者:一只大喵咪1201 🐱专栏:《网络》 🔥格言:你只管努力,剩下的交给时间! 今天起正式开始学习网络部分的知识,依托的环境是Linux操作系统,而且是建立在前…