Python3.x+PyQt4/5学习笔记(一)各种详细备注

Python kingmo888 2570℃ 0评论

好久没写博客了,刚发现草稿箱里竟然留存了世纪封未写完的博文,可是,真的没有激情把他们写完,

 

目前,准别写2个系列的文章,一个系列是股票交易策略——多因子Alpha对冲模型或者择时对冲模型,等等,由于在设计该策略的过程中,会用到N多的数据处理,比如数据落地啊、落地后的清洗、处理、因子生成等等,以及因子数据的处理,之前写了一些脚本来监控,虽然挺方便但是用久了之后呢,还是感觉不如带界面的监控方式来的实在。

因此准备再次入坑PyQt系列。

 

说到这里,不得不插入一句题外话,查资料时找到某论坛,需要注册下载资料,注册之,发现竟然已经注册了,完全没有印象,去邮箱尝试查了下历史邮件,没想到竟然早在2013年就已经注册了!!!!!可是,我对pyqt还是一点也不懂啊,充分说明了……虽然有眼光,但是没有毅力也是白搭啊!

言归正传,

 

本系列学习笔记将以python3为主,资料里涉及到一些pyqt4+python2.7的资料,我会全部尝试转为python3的,至于是否pyqt4还是pyqt5,这个就无所谓啦,转换起来不要太简单!


放上两个链接先:

官方教程->http://zetcode.com/gui/pyqt5/


例子1:

一个到时间自动显示一个Lable的代码案例:

# -*- coding: utf-8 -*-
"""
25行的闹钟程序
Created on Tue Jul  4 11:21:42 2017

@author: Lizenghai
"""

import sys
import time
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

#%%


if __name__ == '__main__':
    app = QApplication(sys.argv)   # pyqt5中本方法迁移至QtWidgets
    
    try:
        due = QTime.currentTime()   # QT的时间类
        message = '''Alert!\n
        Send 0.2 BTC TO THIS ADDRESS AND CONTACT
        THIS EMAIL WITH YOUR IP OF YOUR SERVER TO
        RECOVER YOUR DATA!!'''
        if len(sys.argv) < 2:
            raise ValueError
        
        hours, mins = sys.argv[1].split(':')
        due = QTime(int(hours), int(mins))   # 生成QT格式的时间
        
        if not due.isValid():
            raise ValueError
        if len(sys.argv) > 2:
            message = ''.join(sys.argv[2:])
    except:
        message = 'Usage: alert.pyw HH:MM [optional message]'
        print(message)
        
    while QTime.currentTime() < due:
        time.sleep(2)
    
    label = QTextEdit('<font color=red size=30><b>'+message+'</b></font>')
    label = QLabel('<font color=red size=30><b>'+message+'</b></font>')
    label.setWindowFlags(Qt.SplashScreen)# 将各个窗口标签设置为闪屏,这样就没有标题栏了
    label.show()        # 向QApp对象的队列中增加一个重绘窗口事件
    QTimer.singleShot(60000, app.quit)  # singleShot使用的是毫秒,指定事件到达后,执行指定的函数,这里是退出函数。

    app.exec_()

 

例子2:三十多行写个计算器

# -*- coding: utf-8 -*-
"""
表达式求值程序
Created on Tue Jul  4 16:27:22 2017

@author: Li Zeng hai
"""
from __future__ import division
import sys

from math import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *



class Form(QDialog):
    # QDialog 
    def __init__(self, parent=None):
        # 继承类时,需要实例化基类,实现基类某些功能
        super(Form, self).__init__(parent)
        # 实例化一个多行文本框控件
        self.browser = QTextBrowser()
        # 实例化一个单行文本框控件,并设置默认文本
        self.lineedit = QLineEdit("Type an expression and press Enter")
        # 控件默认全选
        self.lineedit.selectAll()
        # 布局盒子?
        layout = QVBoxLayout()
        # 添加窗口部件
        layout.addWidget(self.browser)
        layout.addWidget(self.lineedit)
        # 设置窗口布局
        self.setLayout(layout)
        # 设置焦点
        self.lineedit.setFocus()
        # pyqt4中的connect已经在pyqt5移除,使用以下代码。
        self.lineedit.returnPressed.connect(self.updateUi)
        # 设置标题
        self.setWindowTitle("计算器")


    def updateUi(self):
        try:
            # 获取
            text = self.lineedit.text()
            # 当输入内容为clear时,清屏。
            if text.lower() == 'clear':
                self.browser.clear()
            else:
                # 通过eval方式将str执行。并将源str和结果添加到browser
                self.browser.append("%s = <b>%s</b>" % (text, eval(text)))
        except:
            self.browser.append(
                    "<font color=red>%s is invalid!</font>" % text)
        # 执行后清除
        self.lineedit.clear()


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

 

Form的resizeEvent(),move()方法可以动态的计算他们的大小和位置。

Pyqt提供了3种布局,这三种布局之间可以相互嵌套,分别是:垂直布局、水平布局、网格布局。

 

转载请注明:Python量化投资 » Python3.x+PyQt4/5学习笔记(一)各种详细备注

喜欢 (1)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址