vnpy源码阅读学习(7):串在一起
串在一起
我们已经分析了UI、MainEngine、EventEngine。然后他们几个是如何发挥作用的呢?我总结了一张图:

我们来具体的看看UI部分是如何跟EventEngine穿插起来的
- \examples\vn_trader\run.py
def main():
""""""
qapp = create_qapp()
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_window = MainWindow(main_engine, event_engine)
- \vnpy\trader\ui\mainwindow.py
#在MainWindow中
def __init__(self, main_engine: MainEngine, event_engine: EventEngine):
self.main_engine = main_engine
self.event_engine = event_engine
self.init_ui()
def init_ui(self):
self.init_dock()
def init_dock(self):
self.trading_widget, trading_dock = self.create_dock(
TradingWidget, "交易", QtCore.Qt.LeftDockWidgetArea
)
def create_dock(
self, widget_class: QtWidgets.QWidget, name: str, area: int
):
widget = widget_class(self.main_engine, self.event_engine)
从上述代码中我们可以看到widget在实例化的时候,传入了main_engine和event_engine
- \vnpy\trader\ui\widget.py
signal_tick = QtCore.pyqtSignal(Event)
def __init__(self, main_engine: MainEngine, event_engine: EventEngine):
super(TradingWidget, self).__init__()
self.main_engine = main_engine
self.event_engine = event_engine
self.vt_symbol = ""
self.init_ui()
self.register_event()
def register_event(self):
self.signal_tick.connect(self.process_tick_event)
self.event_engine.register(EVENT_TICK, self.signal_tick.emit)
def process_tick_event(self, event: Event):
""""""
tick = event.data
我们已经看到一个窗体把一个回调函数process_tick_event注册给了EventEngine利用事件和插槽把整个系统连接在了一起,妙哉!
有了大概的框架,我们似乎都可以设计一个不断触发Event,然后一个UI框架,可以有多个窗体不断的相应这些事件。而且这些事件可以传递给多个订阅者窗体,且是通过多线程在游走于多个窗体。
vnpy源码阅读学习(7):串在一起的更多相关文章
- vnpy源码阅读学习(1):准备工作
vnpy源码阅读学习 目标 通过阅读vnpy,学习量化交易系统的一些设计思路和理念. 通过阅读vnpy学习python项目开发的一些技巧和范式 通过vnpy的设计,可以用python复现一个小型简单的 ...
- vnpy源码阅读学习(5):关于MainEngine的代码阅读
关于MainEngine的代码阅读 在入口文件中,我们看到了除了窗体界面的产生,还有关于MainEngine和EventEngin部分.今天来学习下MainEngine的代码. 首先在run代码中,我 ...
- vnpy源码阅读学习(4):自己写一个类似vnpy的UI框架
自己写一个类似vnpy的界面框架 概述 通过之前3次对vnpy的界面代码的研究,我们去模仿做一个vn.py的大框架.巩固一下PyQt5的学习. 这部分的代码相对来说没有难度和深度,基本上就是把PyQt ...
- vnpy源码阅读学习(8):关于app
关于app 在入口程序中,我们看到了把 gateway,app, 各类的engine都添加到mainEngine中来.不难猜测gateway主要是处理跟外部的行情,接口各方面的代码,通过别人的文章也不 ...
- vnpy源码阅读学习(3):学习vnpy的界面的实现
学习vnpy的界面的实现 通过简单的学习了PyQt5的一些代码以后,我们基本上可以理解PyQt的一些用法,下面让我们来先研究下vnpy的UI部分的代码. 首先回到上一节看到的run.py(/vnpy/ ...
- vnpy源码阅读学习(9)回到OptionMaster
回到OptionMaster 根据我们对APP调用的代码阅读,我们基本上知道了一个APP是如何被调用,那么我们回到OptionMaster学习下这个APP的实现. 看看结构 class OptionM ...
- vnpy源码阅读学习(2):学习PyQt5
PyQt5的学习 花费了一个下午把PyQt5大概的学习了下.找了一个教程 PyQt5教程 跟着挨着把上面的案例做了一遍,大概知道PyQt5是如何生成窗体,以及控件的.基本上做到如果有需求要实现,查查手 ...
- Spring源码阅读学习一
昨天抽时间阅读Spring源码,先从spring 4.x的core包开始吧,除了core和util里,首当其冲的就是asm和cglib. 要实现两个类实例之间的字段的复制功能: 多年之前用C#,因为阅 ...
- requests源码阅读学习笔记
0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情. 1.另一种类的初始化方式 class Reques ...
随机推荐
- LeetCode 刷题记录(6-10题)
6 Z 字形变换(题目链接) class Solution: def convert(self, s, numRows): """ :type s: str :type ...
- Ubuntu18.04安装OpenStack
Ubuntu18.04 安装Queens版本OpenStack 安装环境 系统 系统使用的是Ubuntu18,最少4核8G内存,20G硬盘空间. 工具 devstack DevStack是一系列可扩展 ...
- androidthreadtest<CODE 2 chaper9>
学习目的:1.了解android线程的使用 2.了解主线程与子线程区别 3.解析异步处理机制主线程与子线程:所谓主线程,在Windows窗体应用程序中一般指UI线程,这个是程序启动的时候首先创建的线程 ...
- swoole I/O 模型
I/O即Input/Output,输入和输出的意思.在计算机的世界里,涉及到数据交换的地方,比如磁盘.网络等,就需要I/O接口. 通常,I/O是相对的.比如说你打开浏览器,通过网络I/O获取我们网站的 ...
- Flash之后是不是该IE浏览器了
Flash死亡,Adobe推荐大家拥抱HTML5. 其实Flash本身也是支持手机端的. 一.Flash宣告死亡 Adoebe官方网站发布了公告,2020年12月30日起终止支援Flash.目前Chr ...
- ZOJ 4109 Welcome Party
题目链接:(https://zoj.pintia.cn/problem-sets/91827364500/problems/91827370504)(https://vjudge.net/proble ...
- PhaserJS 3 屏幕适配时的小坑 -- JavaScript Html5 游戏开发
巨坑:在config内不要把 width 设为 window.innnerWidth在config内不要把 width 设为 window.innnerWidth在config内不要把 width 设 ...
- CSS3实现一个旋转的花朵
要效果图如下: 实现原理:其实很简单,就是中间的圆圈定位在中间,其他的6个圆圈,进行不同的绝对定位,然后进行旋转!代码: <!DOCTYPE html> <html lang=&qu ...
- CSS3详解:border color
继续我们的 ,大家觉得怎么样呢?
- 基于springboot1.5.9整合shiro时出现静态文件找不到的问题
开门见山吧,上午对shiro进行整合了下,因为之前使用ssm框架对shiro框架整合过,所以觉得使用springboot再次对shiro框架进行整合也是没啥问题,但最后整合完之后,使用thymelea ...