当前位置 : 主页 > 编程语言 > python >

PyQt汇率兑换工具实现的代码,需要引用上一节写的DataMake类

来源:互联网 收集:自由互联 发布时间:2022-06-18
#coding=utf8 ''' 货币转换实例讲解: 这个应用必须第一下载和参数这交换汇率。 那么它必须创建用户接口来指定用户货币和感兴趣的金额。 这个应用需要导入包:sys、urllib2、PyQt4.QtCore、
#coding=utf8
'''
货币转换实例讲解:
这个应用必须第一下载和参数这交换汇率。
那么它必须创建用户接口来指定用户货币和感兴趣的金额。

这个应用需要导入包:sys、urllib2、PyQt4.QtCore、PyQt4.QtGui库。
urllib2库提供一种方便抓取网络文件的功能。

首先,创建一个集成QDialog的类Form,创建一个构造函数:
该构造函数包含一个参数parent,默认为None。

在构造函数中使用super函数,初始化创建的form。
调用Form的函数getdata(),该方法是获取交换汇率,
把获取的汇率填充在字典里并返回一个包含费率生效日期的字符串。
字典的key是货币名,字典的值是转换因子。

使用sorted()函数对字典的key进行排序,把排序的后的列表保存在rates变量中。
把rates列表中的信息在下拉列表控件中显示出来。
date变量、rates变量、dataLabel变量在__init__函数内被引用。
所以在类实例中不用保存它们的引用。

另一方面,需要接入下拉列表和toLabel(显示目标金币的总数),因此使用实例变量self。
添加相同的货币排序列表在下拉列表(comboboxes)和QDoubleSpinBox上,
一个spinbox处理浮点数值。给spinbox提供一个最小值和最大值,以及初始化值。

一个grid布局在这个实例中被使用。当添加一个widget到grid时,需要指定出现的行、列位置,
行列位置从零开始。好多实例都可以使用grid布局。

界面创建好之后,需要通过connect()函数通过设置信号和函数把界面和逻辑操作联系起来。
如果用户改变下拉列表中的当前的值,相应的下拉列表会发射一个currentIndexChanged()的信号,
这个信号带有新当前item的索引位置。
类似的,如果用户改变spinbox的值,valueChanged()信号会被触发,该信号带有信息的值。
该实例通过Python的插槽:updateUi()连接所有这些信号。

updateUi()函数:
在下拉列表的currentIndexChanged()信号和spinbox的valueChanged()信号被发射,
才做出响应。所有涉及的信号也传递一个参数,在这个实例中忽略该参数。
不管涉及什么信号,都做相同的处理。提取"to"和"from"的货币,计算"to"的数额并同时设置toLabel的text。
给"from"文本变量的名字from_,因为from是系统关键字,因此不使用from作为变量。
不得不在计算金额时,不进行换行,使线条足够窄以适合页面。
在任何实例中,优先设置线条长度为了在同一屏幕读取两个文件。

getdata()函数:
这个方法是获取驱动应用程序的数据的函数。
创建一个实例属性,self.rate。
把抓取并处理数据的代码放在try...except代码块中,带代码块出现异常时,程序正常运行,抛出相关异常。
'''
import sys
#导入数据处理类
from DataMake import DateMake
from PyQt4.QtCore import *
from PyQt4.QtGui import *

#创建一个继承QDialog的类Form
class Form(QDialog):
def __init__(self,parent=None):
#调用super对Form进行初始化
super(Form,self).__init__(parent)
#把汇率更改日期通过DateMake()的getdata()方法赋值
date=DateMake().getdata()[0]
#调用sorted函数对汇率字典的keys值进行排序
#并把拍完序的列表赋值给rates变量
rates=sorted(DateMake().getdata()[1].keys())
#创建一个Label对象用来显示日期
dateLabel=QLabel(date)
#创建一个下拉列表
self.fromComboBox=QComboBox()
#把汇率的键值添加到下拉列表控件中
self.fromComboBox.addItems(rates)
#创建一个浮点调整数值控件
#用于调整兑换的数量
self.fromSpinBox=QDoubleSpinBox()
#设置数额的最大与最小值
self.fromSpinBox.setRange(0.01,10000.00)
#设置初始化显示值
self.fromSpinBox.setValue(1.00)

#创建一个下拉列表
self.toComboBox=QComboBox()
#把汇率的键值添加到下拉列表控件中
self.toComboBox.addItems(rates)
#创建一个Label用来显示转换后的金额
#初始显示为1.00
self.toLabel=QLabel("1.00")

#创建一个网格布局对象
grid=QGridLayout()
#把日期显示Label放在第一行,第一列
grid.addWidget(dateLabel,0,0)
#把目的地转换国家的下拉列表l放在第二行,第一列
grid.addWidget(self.fromComboBox,1,0)
#把转换金额调整按钮l放在第二行,第二列
grid.addWidget(self.fromSpinBox,1,1)
#把要转换成国家的下拉列表l放在第三行,第一列
grid.addWidget(self.toComboBox,2,0)
#把要转换金额放在第三行,第二列
grid.addWidget(self.toLabel,2,1)
#把grid对象放在From中
self.setLayout(grid)

#调用connect当控件相应的信号被发送
#调用self.updateUi函数用来更给页面信息
self.connect(self.fromComboBox,SIGNAL("currentIndexChanged(int)"), self.updateUi)
self.connect(self.toComboBox,SIGNAL("currentIndexChanged(int)"), self.updateUi)
self.connect(self.fromSpinBox,SIGNAL("valueChanged(double)"), self.updateUi)
#设置窗口的标题
self.setWindowTitle("Currency Converter")

#更新控件显示内容
def updateUi(self):
#获取所要兑换国家的当前文本信息并转换成unicode
to = unicode(self.toComboBox.currentText())
#获取所属国家的当前文本信息并转换成unicode
from_ = unicode(self.fromComboBox.currentText())
#(所属国家/所要兑换国家的汇率)*所要兑换的金额
#就是兑换后的实际金额
amount = (DateMake().getdata()[1][from_] / DateMake().getdata()[1][to]) * self.fromSpinBox.value()
#把兑换后的金额在toLabel中显示出来
self.toLabel.setText("%0.2f" % amount)

app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()


上一篇:PyQt4的信号与插槽中简单实例源码讲解
下一篇:没有了
网友评论