vnpy源码阅读学习(7):串在一起

串在一起

我们已经分析了UI、MainEngine、EventEngine。然后他们几个是如何发挥作用的呢?我总结了一张图:

我们来具体的看看UI部分是如何跟EventEngine穿插起来的

  1. \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)
  1. \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

  1. \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框架,可以有多个窗体不断的相应这些事件。而且这些事件可以传递给多个订阅者窗体,且是通过多线程在游走于多个窗体。

原文地址:https://www.cnblogs.com/bbird/p/12587791.html

时间: 2024-10-07 12:48:01

vnpy源码阅读学习(7):串在一起的相关文章

vnpy源码阅读学习(5):关于MainEngine的代码阅读

关于MainEngine的代码阅读 在入口文件中,我们看到了除了窗体界面的产生,还有关于MainEngine和EventEngin部分.今天来学习下MainEngine的代码. 首先在run代码中,我们看到以下的代码 main_engine.add_gateway(DeribitGateway) main_engine.add_app(OptionMasterApp) 从上述代码可以基本猜测所有的网管,设置,甚至策略引擎行情,都跟MainEngine有关系,MainEngine应该是一个主线,把

vnpy源码阅读学习(3):学习vnpy的界面的实现

学习vnpy的界面的实现 通过简单的学习了PyQt5的一些代码以后,我们基本上可以理解PyQt的一些用法,下面让我们来先研究下vnpy的UI部分的代码. 首先回到上一节看到的run.py(/vnpy/example/trade/run.py)的关于UI部分的代码. 生成QApplication部分 qapp = create_qapp() 我们跟踪得到 create_qapp() 方法是写在 "/vnpy/trader/ui/init.py"上面的. init.py主要是把一个文件夹变

requests源码阅读学习笔记

0:此文并不想拆requests的功能,目的仅仅只是让自己以后写的代码更pythonic.可能会涉及到一部分requests的功能模块,但全看心情. 1.另一种类的初始化方式 class Request(object): """The :class:`Request` object. It carries out all functionality of Requests. Recommended interface is with the Requests function

【 js 基础 】【 源码学习 】backbone 源码阅读(三)

最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-study)进行参考交流,有详细的源码注释,以及知识总结,同时 google 一下 backbone 源码,也有很多优秀的文章可以用来学习. 我这里主要记录一些偏设计方向的知识点.这篇文章主要讲 backbone.sync 中用到的 Rest 和 CRUD. 首先我们简单了解一下 REST: REST :

【 js 基础 】【 源码学习 】backbone 源码阅读(一)

最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-study)进行参考交流,有详细的源码注释,以及知识总结,同时 google 一下 backbone 源码,也有很多优秀的文章可以用来学习. 我这里主要记录一些偏设计方向的知识点.具体从以下几个方面入手:1.MVC 框架2.观察者模式 以及 控制反转 一.MVC 框架所谓 MVC 框架,包含三个部分,mod

【 js 基础 】【 源码学习 】backbone 源码阅读(二)

最近看完了 backbone.js 的源码,这里对于源码的细节就不再赘述了,大家可以 star 我的源码阅读项目(https://github.com/JiayiLi/source-code-study)进行参考交流,有详细的源码注释,以及知识总结,同时 google 一下 backbone 源码,也有很多优秀的文章可以用来学习. 我这里主要记录一些偏设计方向的知识点.这篇文章主要讲 控制反转. 一.控制反转 上篇文章有说到控制反转,但只是简略的举了个例子,在这里我们详细说一下这个知识点,它其实

【原】FMDB源码阅读(一)

[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于FMDB组件我是一点都没用过.好在FMDB源码中的main.m文件提供了大量的示例,况且网上也有很多最佳实践的例子,我就不在这献丑了.我们先从一个最简单的FMDB的例子开始: // 找到用户目录下的Documents文件夹位置 NSString* docsdir = [NSSearchPathFor

【原】SDWebImage源码阅读(五)

[原]SDWebImage源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 前面的代码并没有特意去讲SDWebImage的缓存机制,主要是想单独开一章节专门讲解缓存.之前我们也遇到一些缓存的属性和方法,比如storeImage.queryDiskCacheForKey.memCache等等. SDWebImage的缓存分为两个部分,一个内存缓存,使用NSCache实现,另一个就是硬盘缓存(disk),使用NSFileManager实现. 不过这么多函数,

源码阅读经验谈-slim,darknet,labelimg,caffe(1)

本文首先谈自己的源码阅读体验,然后给几个案例解读,选的例子都是比较简单.重在说明我琢磨的点线面源码阅读方法.我不是专业架构师,是从一个深度学习算法工程师的角度来谈的,不专业的地方请大家轻拍. 经常看别人写的代码,然后改别人的代码,然后实现自己的想法,我想这是我们coder常干的事情.看人看代码,代码如人.他代码写的有多清爽简洁,说明他思维是清晰的:代码的结构有多合理,模块化内聚如何,是否低耦合,反应他的宏观把控能力.一个软件系统你可以把他看成是一个简单的企业,各个职能部门如何发挥自己的作用,相当