Qt Gui快速编程 第四章 源码

4.1.1 弹出闹钟
# -*-coding: utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys, time
app = QApplication(sys.argv)
try:
    due = QTime.currentTime()
    message = "alert!"
    if len(sys.argv)<2:
        raise ValueError
    hours, mins = sys.argv[1].split(":")
    due = QTime(int(hours), int(mins))
    if not due.isValid():
        raise ValueError
    if len(sys.argv)>2:
        message = " ".join(sys.argv[2:])
    while QTime.currentTime() < due:
        time.sleep(1)
    label = QLabel("<font size=72 color=red><b>" + message.decode("gbk") + "</b></font>") # 因为测试环境是windows且参数加了中文,所以加入此行来转换编码, 吐血的2.x版本
    label.setWindowFlags(Qt.SplashScreen)
    label.show()
    app.exec_()
except ValueError:
    print "error"

4.2.1 表达式求值 

# -*-coding: utf-8 -*-
from __future__ import division
import sys
from math import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *


class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)  # 这个参数parent, QDialog有什么用,如果大家看到请告知
        self.brower = QTextBrowser()
        self.lineedit = QLineEdit(u"输入表达式并按enter键来求值")
        self.btn_close = QPushButton(u"关闭")
        self.lineedit.selectAll()
        layout = QVBoxLayout()
        layout.addWidget(self.brower)  # 在QVBoxLayout对象里装载进QTextBrowser对象, 即一个大窗口包含一个文本窗口
        layout.addWidget(self.lineedit)  # 文本窗口下面, 已经有了输入提示框
        layout.addWidget(self.btn_close)  # 添加关闭按钮
        self.setLayout(layout)  # 应该是初始化窗口,这句挺重要不然不会有窗口显示
        self.lineedit.setFocus()
        self.connect(self.lineedit, SIGNAL("returnPressed()"), self.updateUi)
        self.connect(self.btn_close, SIGNAL("clicked()"), self.closex)
        self.setWindowTitle(u"简易计算器")

    def updateUi(self):
        try:
            text = unicode(self.lineedit.text())
            self.brower.append("{0} = <b>{1}</b>".format(text, eval(text)))  # 字符串做了一下处理,用format函数更优雅
        except:
            self.brower.append("<font color=red>{0} 是错误字符,程序不能理解!</font>".format(text))

    def closex(self):
        exit(0)  # 转向内核态, 由系统结束进程


app = QApplication(sys.argv)
form = Form()
form.show()
app.setQuitOnLastWindowClosed(False)  # 不销毁程序,只是隐藏
app.exec_()

4.3 当前汇率计算

# -*-coding: utf-8 -*-
from __future__ import division
import sys
import json
import requests
from math import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *


class Form(QDialog):
    """
        todo: 货币转换程序,书中的urllib2 操作不符合个人习惯,用requests替换了, 如果要运行请安装它,
              由于书中的API已经不能用了,所以API也替换了,数据格式和书中不太一样请注意
    """

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        date = self.getdata()
        rates = sorted(self.rates.keys())
        print rates
        dateLabel = QLabel(date)
        self.fromComboBox = QComboBox()
        self.fromComboBox.addItems(rates)
        self.fromSpinBox = QDoubleSpinBox()
        self.fromSpinBox.setRange(0.01, 100000000.00)
        self.fromSpinBox.setValue(1.00)
        self.toComboBox = QComboBox()
        self.toComboBox.addItems(rates)
        self.toLabel = QLabel("1.00")
        grid = QGridLayout()  # 使用网格布局
        grid.addWidget(dateLabel, 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.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(u"货币转换")

    def updateUi(self):
        to = unicode(self.toComboBox.currentText())
        froms = unicode(self.fromComboBox.currentText())  # from 命名冲突, 更改为froms
        amount = (self.rates[to] / self.rates[froms]) * self.fromSpinBox.value()
        self.toLabel.setText("{0}".format(round(amount, 2)))

    def getdata(self):
        self.rates = {}
        try:
            fh = requests.get("https://api.fixer.io/latest")
            if fh.status_code == 200:
                fh = fh.content
                init_fh = json.loads(fh)
                self.rates = init_fh["rates"]
                return u"当前汇率日期为:{0}".format(init_fh["date"])
        except Exception, e:
            return u"错误提示:{0}".format(e)


app = QApplication(sys.argv)
convertForm = Form()
convertForm.show()
app.exec_()
待更新..........
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值