用PyQt5实现了界面,使用urllib实时抓取ip138.com网站的汇率信息。

import sys
import urllib
import urllib.request
from PyQt5.QtWidgets import * class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        self.getdata()         comboItems = list(self.rates.keys())
        textLabel = QLabel('实时汇率查询换算')
        self.fromComboBox = QComboBox()
        self.fromComboBox.addItems(comboItems)
        self.fromSpinBox = QDoubleSpinBox()
        self.fromSpinBox.setRange(0.01, 10000000.00)
        self.fromSpinBox.setValue(100)
        self.toComboBox = QComboBox()
        self.toComboBox.addItems(comboItems)
        self.toLabel = QLabel('1.00')         grid = QGridLayout()
        grid.addWidget(textLabel, 0, 0)
        grid.addWidget(self.fromComboBox, 1, 0)
        grid.addWidget(self.fromSpinBox, 1, 1)
        grid.addWidget(self.toComboBox, 2, 0)
        grid.addWidget(self.toLabel, 2, 1)
        self.setLayout(grid)         self.updateUi()
        self.fromComboBox.currentIndexChanged.connect(self.updateUi)
        self.toComboBox.currentIndexChanged.connect(self.updateUi)
        self.fromSpinBox.valueChanged.connect(self.updateUi)         self.setWindowTitle('汇率  @author : likui')     def updateUi(self):
        from_value = self.rates[self.fromComboBox.currentText()]
        to_value = self.rates[self.toComboBox.currentText()]
        money = self.fromSpinBox.value()
        url = 'http://qq.ip138.com/hl.asp?from=%s&to=%s&q=%s' % (
            from_value, to_value, money)
        html = self.urlopen(url)
        table_start = html.find('<table')
        count = 5
        td_begin = html.find('<td')
        while count:
            count -= 1
            td_begin = html.find('<td', td_begin + 1)
            temp = td_begin         td_end = html.find('</td>', td_begin)
        amount = float(html[td_begin + 4:td_end])
        self.toLabel.setText('%0.2f' % amount)     def getdata(self):
        self.rates = {}
        url = 'http://qq.ip138.com/hl.asp'
        html = self.urlopen(url)
        td_begin = html.find('<td>')
        td_end = html.find('</td>', td_begin)
        resource = html[td_begin:td_end]
        begin = resource.find('<optgroup')
        end = resource.find('</optgroup>')
        option_begin = resource.find('<option', begin)
        while option_begin != -1:
            value = resource[option_begin + 14:option_begin + 17]
            value_begin = resource.find('>', option_begin)
            value_end = resource.find('<', value_begin)
            rate = resource[value_begin + 1:value_end]
            self.rates[rate] = value
            option_begin = resource.find('<option', value_end)
            if option_begin > end:
                break     def urlopen(self, url):
        ret = urllib.request.Request(url)
        ret.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                                     'Chrome/41.0.2272.101 Safari/537.36')
        html = urllib.request.urlopen(ret).read().decode('GB2312')
        return html if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = Form()
    form.show()
    app.exec_()

PyQt5实时汇率查询的更多相关文章

  1. Pyqt5 实时图像滚动

    实时图像 写了一个关于实时图像滚动显示的例子,做个记录. 滚动算法: 难点: 将内存数据绘制到界面,需要用到QImage和QPixmap,使用QImage转换一下,具体参见代码.这个费了好大劲才弄出来 ...

  2. 生活常用类API调用的代码示例合集:邮编查询、今日热门新闻查询、区号查询等

    以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 邮编查询:通过邮编查询地名:通过地名查询邮编 今日热门新闻查询:提 ...

  3. 制作属于自己的翻译软件(基于PyQt5+Python+实时翻译)

    目录 制作属于自己的翻译软件(基于PyQt5+Python+实时翻译) 翻译软件上传到github上. 软件截图 主要的思想 界面方面 程序方面 制作属于自己的翻译软件(基于PyQt5+Python+ ...

  4. PyQt5播放实时视频流或本地视频文件

    目录 编辑UI 新建视频播放类Display 打开相机 关闭相机 显示视频画面 完整源代码 效果图 编辑UI 编辑UI如下图所示: 新建视频播放类Display 定义如下初始化函数 def __ini ...

  5. pyQt5不让进度条卡住

    这里我们用一个更新程序做示例, 下载文件的过程中让进度条实时显示下载进度. 如果下载和更新进度条的工作都放在一个线程中,会出现进度条卡顿的情况. Qt中正确的做法是把界面刷新和工作任务交给不同的线程去 ...

  6. pyqt5 graphics view简单使用

    Graphics View提供了一个平面,用于管理和交互大量自定义的2D图形图元,以及一个用于可视化图元的视图窗口小部件,支持缩放和旋转. 该框架包括一个事件传播架构,允许场景中图元的精确双精度交互功 ...

  7. pyqt5的使用目录

    pyqt5的安装 我的第一个例子 标签控件QLabel的使用   按钮QPushButton 信号与槽 pyqt5模块介绍 pycharm活动模板  QObject 定时器  QWidget类-坐标系 ...

  8. 基于pyQt5开发的股价显示器(原创)

    #/usr/bin/env python # -*- coding: utf-8 -*- ''' @author="livermorium116" 为了绕开公司内网而开发的 股票实 ...

  9. linux下Python2.7编译安装PyQt5

    ---作者吴疆,未经允许,严禁转载,违权必究--- ---欢迎指正,需要源码和文件可站内私信联系--- -----------点击此处链接至博客园原文----------- 功能说明:在ubuntu系 ...

随机推荐

  1. 浮点数的陷阱--double i != 10 基本都是对的,不管怎么赋值

    #include <stdio.h>int main(){    double i;    for(i = 10; i != 10, i < 12; i += 0.1)       ...

  2. (转)Linux命令unzip

    场景:解压war包时候用到该命令,感觉很方便. 1 基本用法 unzip [选项] 压缩文件名.zip 1.2 完整语法 unzip [-cflptuvz] [-agCjLMnoqsVX] [-P & ...

  3. ETL作业调度软件TASKCTL4.1单机部署

    单机部署,实际上就是将EM节点和一个Server节点安装到同一个地方.EM节点是TASKCTL服务端的最顶层,主要负责客户端与服务端之间的通信.Server节点是TASKCTL的调度服务控制层,也有A ...

  4. maven快速上手

    1.maven安装 首先下载apache-maven-3.3.3-bin.zip(版本可以自己根据自己想要的下载). 解压后如下:   接下来配置系统环境变量: 到此,maven安装好了,接下来输入 ...

  5. 40. leetcode 202. Happy Number

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  6. POJ--1088--dp--滑雪

    #include<iostream> using namespace std; ; }; }; int dp(int,int); int row,col; int main() { whi ...

  7. spring boot admin

    这里记录一个spring cloud的模板,有的模块spring cloud eureka + spring boot admin + spring cloud zuul + 一个普通spring c ...

  8. struts2增删改查---layer---iframe层---通配符---国际化

    在前一篇文章的基础上,修改一部分即可(在此只是简单介绍) struts.xml页面 在原来的基础之上 action的name="*_*"  class="包名.{1}&q ...

  9. vue模板的几种写法及变化

    第一种: 2+版本支持,1+版本支持 <script> <template id="aaa"> <h1>我是组件2</h1> < ...

  10. 从JSON数据源导入数据(未完)