pyqt5+爬虫+有界面的爬取天气预报

pyinstaller打包——图片资源无法显示问题
pyinstaller -F -w xxx.py


import sys
import urllib
from json import JSONDecodeError

import requests
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *





class XZS(QWidget):
    def __init__(self):
        super(XZS, self).__init__()

        self.resize(520,600)
        self.center()   #使窗口居中
        self.setWindowTitle("小助手")
        self.setWindowIcon(QIcon('1.jpg'))

        font = QtGui.QFont()
        font.setFamily("宋体")


        self.textEdit = QLineEdit(self)
        self.textEdit.move(60, 50)
        self.textEdit.setFont(font)

        self.textEdit2 = QTextEdit(self)
        self.textEdit2.move(60, 100)
        self.textEdit2.setFixedSize(300, 400)
        self.textEdit2.setFont(font)
        self.textEdit2.setFocusPolicy(QtCore.Qt.NoFocus)

        self.label1 = QLabel(self)
        self.label1.setFont(font)
        self.label1.setText("城市天气查询")
        # self.label1.setFixedSize(300, 400)
        self.label1.move(50, 30)

        btn_1 = QPushButton(self)
        btn_1.setText("查询")
        btn_1.move(250, 30)
        btn_1.setFixedSize(100, 50)
        btn_1.clicked.connect(self.look)


        btn_2 = QPushButton(self)
        btn_2.setText("退出")
        btn_2.move(400, 30)
        btn_2.setFixedSize(100, 50)
        btn_2.clicked.connect(QCoreApplication.quit)


    def look(self):
        city = self.textEdit.text()
        print(city)

        html = f'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(city)

        try:
            info = requests.get(html)
            # print(info)
            info.encoding = 'utf-8'
        except requests.ConnectionError:
            raise

        try:
            info_json = info.json()
            # print(info_json)
        except JSONDecodeError:
            return '无法查询'

        try:
            for i in range(1):  # 将每一天的数据放入列表中
                # 天气情况
                data = info_json['data']
                city = f"城市:{data['city']}\n"
                # 以 f开头表示在字符串内支持大括号内的python 表达式
                today = data['forecast'][i]
                date = f"日期:{today['date']}\n"
                now = f"实时温度:{data['wendu']}度\n"
                temperature = f"温度:{today['high']} {today['low']}\n"
                fengxiang = f"风向:{today['fengxiang']}\n"
                type = f"天气:{today['type']}\n"
                tips = f"贴士:{data['ganmao']}\n"

                self.textEdit2.setText(city + date + now + temperature + fengxiang + type + tips + "\n\n")
                print(city + date + now + temperature + fengxiang + type + tips + "\n\n")

                self.textEdit.clear()

        except:
            self.textEdit2.setText('请输入正确的城市名称')
            self.textEdit.clear()






    def center(self):  # 控制窗口显示在屏幕中心的方法

        # 获得窗口
        qr = self.frameGeometry()
        # 获得屏幕中心点
        cp = QDesktopWidget().availableGeometry().center()
        # 显示到屏幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())


    def keyPressEvent(self,e):
        # 设置快捷键
        if e.key() == Qt.Key_Return:
                self.look()
        # if event.key() == QtCore.Qt.Key_Escape:  # 当我们按住键盘是esc按键时
        #     self.close()  # 关闭程序



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    my = XZS()
    my.show()
    sys.exit(app.exec_())

picpy.py
将图像文件转换为py文件

# -*- coding: utf-8 -*-

import base64


def pic2py(picture_name):
    """
    将图像文件转换为py文件
    :param picture_name:
    :return:
    """
    open_pic = open("%s" % picture_name, 'rb')
    b64str = base64.b64encode(open_pic.read())
    open_pic.close()
    # 注意这边b64str一定要加上.decode()
    write_data = 'img = "%s"' % b64str.decode()
    f = open('%s.py' % picture_name.replace('.', '_'), 'w+')
    f.write(write_data)
    f.close()


if __name__ == '__main__':
    pics = ["Gitee.png"]
    for i in pics:
        pic2py(i)

    print("完成^_^")

import base64
import os
import sys
import urllib
from json import JSONDecodeError

import requests
from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


from Gitee_png import img as one



class XZS(QWidget):
    def __init__(self):
        super(XZS, self).__init__()

        self.resize(520,600)
        self.center()   #使窗口居中
        self.setWindowTitle("小助手")
        self.setWindowIcon(QIcon('favicons.png'))
        palette = QPalette()
        palette.setBrush(QPalette.Background, QBrush(QPixmap("favicons.png")))
        self.setPalette(palette)


        font = QtGui.QFont()
        font.setFamily("宋体")


        self.textEdit = QLineEdit(self)
        self.textEdit.move(60, 50)
        self.textEdit.setFont(font)

        self.textEdit2 = QTextEdit(self)
        self.textEdit2.move(60, 100)
        self.textEdit2.setFixedSize(300, 400)
        self.textEdit2.setFont(font)
        self.textEdit2.setFocusPolicy(QtCore.Qt.NoFocus)

        self.label1 = QLabel(self)
        self.label1.setFont(font)
        self.label1.setText("城市天气查询")
        # self.label1.setFixedSize(300, 400)
        self.label1.move(60, 30)

        btn_1 = QPushButton(self)
        btn_1.setText("查询")
        btn_1.move(250, 30)
        btn_1.setFixedSize(100, 50)
        btn_1.clicked.connect(self.look)


        btn_2 = QPushButton(self)
        btn_2.setText("退出")
        btn_2.move(400, 30)
        btn_2.setFixedSize(100, 50)
        btn_2.clicked.connect(QCoreApplication.quit)


    def look(self):
        city = self.textEdit.text()
        print(city)

        html = f'http://wthrcdn.etouch.cn/weather_mini?city=' + urllib.parse.quote(city)

        try:
            info = requests.get(html)
            # print(info)
            info.encoding = 'utf-8'
        except requests.ConnectionError:
            raise

        try:
            info_json = info.json()
            # print(info_json)
        except JSONDecodeError:
            return '无法查询'

        try:
            for i in range(1):  # 将每一天的数据放入列表中
                # 天气情况
                data = info_json['data']
                city = f"城市:{data['city']}\n"
                # 以 f开头表示在字符串内支持大括号内的python 表达式
                today = data['forecast'][i]
                date = f"日期:{today['date']}\n"
                now = f"实时温度:{data['wendu']}度\n"
                temperature = f"温度:{today['high']} {today['low']}\n"
                fengxiang = f"风向:{today['fengxiang']}\n"
                type = f"天气:{today['type']}\n"
                tips = f"贴士:{data['ganmao']}\n"

                self.textEdit2.setText(city + date + now + temperature + fengxiang + type + tips + "\n\n")
                print(city + date + now + temperature + fengxiang + type + tips + "\n\n")

                self.textEdit.clear()

        except:
            self.textEdit2.setText('请输入正确的城市名称')
            self.textEdit.clear()






    def center(self):  # 控制窗口显示在屏幕中心的方法

        # 获得窗口
        qr = self.frameGeometry()
        # 获得屏幕中心点
        cp = QDesktopWidget().availableGeometry().center()
        # 显示到屏幕中心
        qr.moveCenter(cp)
        self.move(qr.topLeft())


    def keyPressEvent(self,event):
        # 设置快捷键
        if event.key() == Qt.Key_Return:
                self.look()
        if event.key() == QtCore.Qt.Key_Escape:  # 当我们按住键盘是esc按键时
            os.remove('favicons.png')  # 用完可以删除这个临时图片
            self.close()  # 关闭程序



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    tmp = open('favicons.png', 'wb')  # 创建临时的文件
    tmp.write(base64.b64decode(one))  ##把这个one图片解码出来,写入文件中去。
    tmp.close()
    my = XZS()
    my.show()
    os.remove('favicons.png')  # 用完可以删除这个临时图片
    sys.exit(app.exec_())



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PyQt5是一个基于QtPython GUI开发框架,提供了丰富的GUI组件和工具库,MySQL是一个广泛应用的关系型数据库管理系统。PyQt5和MySQL结合起来可以实现MySQL数据库的可视化操作界面。 在实现PyQt5 MySQL界面化的过程中,我们可以采用一些常用的工具库,例如PyMySQL和QSqlTableModel。PyMySQL是一个用于Python的MySQL数据库连接库,可以实现与MySQL的交互与操作,使PyQt5能够与MySQL进行连接。而QSqlTableModel是PyQt5自带的模型类,主要用于与数据库表进行交互,这样我们就可以在PyQt5界面上显示和编辑MySQL数据库中的数据。 在使用PyQt5和MySQL进行连接和数据交互时,需要配置数据库连接信息,包括MySQL服务器IP地址、端口、用户名、密码等信息,并创建表格模型对象,使用模型对象对MySQL数据库中的表进行CRUD操作。在界面设计方面,我们可以使用PyQt5中的控件(例如QTableView、QPushButton、QLineEdit)和布局管理器(例如QHBoxLayout和QVBoxLayout)实现简单且美观的可视化操作界面PyQt5 MySQL界面化可以帮助我们更方便地管理和操作MySQL数据库,具有良好的用户体验和可扩展性,可以为开发人员和企业提供更多的应用场景和商业价值。 ### 回答2: PyQt5是一个Python编程语言下的GUI(图形用户界面)工具包,其主要功能是提供创建图形交互界面的API和库。同时,MySQL是一种常用的开源关系型数据库管理系统。 如果需要将PyQt5与MySQL相结合,以实现对数据库的访问和操作,可以通过使用PyMySQL库实现。这个库可以连接到MySQL数据库,并允许与MySQL服务器交互,例如执行查询、修改或删除操作。 接下来需要创建一个GUI程序,在 PyPlot 或 PyQT5 中实现界面化操作。首先需要设置连接属性,包括MySQL的用户名、密码和数据库名称等基本信息。然后需要在GUI界面中添一些控件,例如按钮、文本框和表格等,并配置事件响应函数,以实现对MySQL数据库的操作。 例如,在PyQt5中可以使用QTableWidget创建一个表格,通过调用PyMySQL库中的函数,将查询结果填入表格中。同时,可以使用QLineEdit控件实现用户输入参数,并通过PyMySQL库将其传递给MySQL服务器。 PyQt5和MySQL的结合可以实现一个强大的图形式数据库编辑器,让用户方便地浏览、管理和分析数据。 ### 回答3: PyQt5是一个Python编程语言的GUI开发框架,可以很方便的开发出跨平台的GUI应用程序。MySQL是一款免费、开源的关系型数据库管理系统,可以用来存储和管理大量的数据。将两者结合起来,可以使得用户在图形化界面下操作MySQL数据库,这就是pyqt5 mysql界面化。 在实现pyqt5 mysql界面化的过程中,需要使用到PyQt5和MySQL的库。PyQt5库提供了对GUI的支持,而对于MySQL的操作,可以使用Python标准库中的MySQLdb库或者是PyMySQL库。在使用PySQL库进行MySQL的操作时,需要注意保证MySQLdb库或者PyMySQL库在Python的运行环境中安装好。 在开发界面时,可以使用PyQt5提供的Qt Designer工具,可视化的进行界面设计。在界面中可以添按钮、文本框、表格等组件,通过PyQt5的信号槽机制,将这些组件与MySQL的操作进行绑定。当用户在界面上点击按钮或者提交了查询信息时,就可以调用MySQL的操作进行数据的增删改查操作了。 在实现pyqt5 mysql界面化时,需要注意保证程序的安全性和稳定性。应该遵循最小权限原则,保证只有经过授权的用户才能进行访问数据库。对于用户输入的数据,也需要进行合法性验证和SQL注入的过滤,防止出现安全漏洞。 总之,pyqt5 mysql界面化是一个实现复杂功能的好方法。它让用户可以在一张漂亮的图形界面下操作数据库,从而提高了效率和便捷性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大胖东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值