Python Qt GUI快速编程-第四章的Currency例子的python3+pytq5+Qt Designer实现

本文是本人用python3+pytq5+Qt Designer实现Python Qt GUI快速编程-第四章的Currency例子,请大家参考。


#Ui_currency.py

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

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(412, 142)
        Dialog.setSizeGripEnabled(True)
        self.gridLayoutWidget = QtWidgets.QWidget(Dialog)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(10, 20, 391, 117))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(5, 5, 5, 3)
        self.gridLayout.setObjectName("gridLayout")
        self.fromComboBox = QtWidgets.QComboBox(self.gridLayoutWidget)
        self.fromComboBox.setObjectName("fromComboBox")
        self.gridLayout.addWidget(self.fromComboBox, 2, 1, 1, 1)
        self.dataLabel = QtWidgets.QLabel(self.gridLayoutWidget)
        self.dataLabel.setObjectName("dataLabel")
        self.gridLayout.addWidget(self.dataLabel, 0, 1, 1, 1)
        self.toComboBox = QtWidgets.QComboBox(self.gridLayoutWidget)
        self.toComboBox.setObjectName("toComboBox")
        self.gridLayout.addWidget(self.toComboBox, 3, 1, 1, 1)
        self.toLabel = QtWidgets.QLabel(self.gridLayoutWidget)
        self.toLabel.setObjectName("toLabel")
        self.gridLayout.addWidget(self.toLabel, 3, 2, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem, 1, 1, 1, 1)
        self.fromSpinBox = QtWidgets.QDoubleSpinBox(self.gridLayoutWidget)
        self.fromSpinBox.setObjectName("fromSpinBox")
        self.gridLayout.addWidget(self.fromSpinBox, 2, 2, 1, 1)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "汇率"))
        self.dataLabel.setText(_translate("Dialog", "TextLabel"))
        self.toLabel.setText(_translate("Dialog", "TextLabel"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

#currency.py

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

"""
Module implementing Currency.
"""

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog,QApplication
from Ui_currency import Ui_Dialog
import sys
import urllib.request
import re

class Currency(QDialog, Ui_Dialog):
    """
    Class documentation goes here.
    """
    def __init__(self, parent=None):
        """
        Constructor

        @param parent reference to the parent widget
        @type QWidget
        """
        super(Currency, self).__init__(parent)
        self.setupUi(self)

        date = self.getdata()
        rates = sorted(self.rates.keys())

        self.dataLabel.setText(date)
        self.fromComboBox.addItems(rates)
        self.fromSpinBox.setRange(0.01, 10000000.00)
        self.fromSpinBox.setValue(1.00)
        self.toComboBox.addItems(rates)
        self.toLabel.setText("1.00")   
        self.fromComboBox.currentIndexChanged.connect(self.updateUi)
        self.toComboBox.currentIndexChanged.connect(self.updateUi)
        self.fromSpinBox.valueChanged.connect(self.updateUi)        
    def getdata(self): # Idea taken from the Python Cookbook
        self.rates = {}
        try:
            date = "Unknown"
            fh = urllib.request.urlopen("http://www.bankofcanada.ca/en/markets/csv/exchange_eng.csv")
            csv_data = str(fh.read())
            pattern = re.compile('Date[\s\S]*')#以"Date"关键词,匹配"Date"之后的数据
            csv_data = pattern.search(csv_data)
            csv_data = csv_data.group(0)
            csv_data = csv_data.split("\\n")#以换行符为标志生成数据列表            
            for line in csv_data:
                line = line.rstrip()
                if not line or line.startswith(("#", "Closing ")):
                    continue
                fields = line.split(",")
                if line.startswith("Date "):
                    date = fields[-1]
                else:
                    try:
                        value = float(fields[-1])
                        self.rates[fields[0]] = value
                    except ValueError:
                        pass
            return "Exchange Rates Date: " + date
        except Exception as e:
            return "Failed to download:\n{0}".format(e)
    def updateUi(self):
        to = self.toComboBox.currentText()#把unicode去掉
        from_ = self.fromComboBox.currentText()#把unicode去掉
        amount = (self.rates[from_] / self.rates[to]) * \
                 self.fromSpinBox.value()
        self.toLabel.setText("%0.2f" % amount)
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    dlg=Currency()
    dlg.show()
    sys.exit(app.exec_())


运行结果
这里写图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值