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

Posted bbird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vnpy源码阅读学习:串在一起相关的知识,希望对你有一定的参考价值。

串在一起

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

技术图片

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

  1. examplesvn_trader un.py
def main():
    """"""
    qapp = create_qapp()
    event_engine = EventEngine()
    main_engine = MainEngine(event_engine)
    main_window = MainWindow(main_engine, event_engine)
  1. vnpy raderuimainwindow.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 raderuiwidget.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源码阅读学习:串在一起的主要内容,如果未能解决你的问题,请参考以下文章

vnpy源码阅读学习学习vnpy的界面的实现

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

vnpy源码阅读学习:自己写一个类似vnpy的界面框架

vnpy源码阅读学习:准备工作

vnpy源码阅读学习准备工作

vnpy源码阅读学习PyQt5的学习