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

网友投稿 314 2022-08-28


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

#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 DateMakefrom PyQt4.QtCore import *from PyQt4.QtGui import *#创建一个继承QDialog的类Formclass 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_()


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PyQt给组件创建信号并使用自定义信号源码实例(pyqt自定义信号和槽)
下一篇:SpringBoot URL带有特殊字符([]/{}等),报400错误的解决
相关文章

 发表评论

暂时没有评论,来抢沙发吧~