From 84eaeb8733c0684761266749790f5ac29b6bbc2a Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Wed, 9 Jan 2019 22:36:48 +0800 Subject: [PATCH] [Add] Add monitor into mainwindow --- tests/trader/run.py | 3 --- vnpy/trader/engine.py | 39 +++++++++++++-------------- vnpy/trader/gateway.py | 1 + vnpy/trader/ui/__init__.py | 10 ++++++- vnpy/trader/ui/ico/about.ico | Bin 0 -> 67646 bytes vnpy/trader/ui/ico/connect.ico | Bin 0 -> 67646 bytes vnpy/trader/ui/ico/contract.ico | Bin 0 -> 67646 bytes vnpy/trader/ui/ico/database.ico | Bin 0 -> 63038 bytes vnpy/trader/ui/ico/editor.ico | Bin 0 -> 67646 bytes vnpy/trader/ui/ico/exit.ico | Bin 0 -> 67134 bytes vnpy/trader/ui/ico/restore.ico | Bin 0 -> 21662 bytes vnpy/trader/ui/ico/test.ico | Bin 0 -> 51774 bytes vnpy/trader/ui/ico/vnpy.ico | Bin 0 -> 67646 bytes vnpy/trader/ui/mainwindow.py | 45 +++++++++++++++++++++++++++++--- vnpy/trader/ui/widget.py | 5 ++++ vnpy/trader/utility.py | 2 +- 16 files changed, 78 insertions(+), 27 deletions(-) create mode 100644 vnpy/trader/ui/ico/about.ico create mode 100644 vnpy/trader/ui/ico/connect.ico create mode 100644 vnpy/trader/ui/ico/contract.ico create mode 100644 vnpy/trader/ui/ico/database.ico create mode 100644 vnpy/trader/ui/ico/editor.ico create mode 100644 vnpy/trader/ui/ico/exit.ico create mode 100644 vnpy/trader/ui/ico/restore.ico create mode 100644 vnpy/trader/ui/ico/test.ico create mode 100644 vnpy/trader/ui/ico/vnpy.ico diff --git a/tests/trader/run.py b/tests/trader/run.py index f6240f53..9fa44e5f 100644 --- a/tests/trader/run.py +++ b/tests/trader/run.py @@ -15,9 +15,6 @@ def main(): main_window = MainWindow(main_engine, event_engine) main_window.showMaximized() - monitor = TickMonitor(main_engine, event_engine) - monitor.show() - qapp.exec() diff --git a/vnpy/trader/engine.py b/vnpy/trader/engine.py index 7c67863e..135a3fd6 100644 --- a/vnpy/trader/engine.py +++ b/vnpy/trader/engine.py @@ -4,6 +4,7 @@ import logging from datetime import datetime from abc import ABC +from typing import Any from vnpy.event import EventEngine, Event @@ -22,23 +23,6 @@ from .setting import SETTINGS from .gateway import BaseGateway -class BaseEngine(ABC): - """ - Abstract class for implementing an function engine. - """ - - def __init__( - self, - main_engine: MainEngine, - event_engine: EventEngine, - engine_name: str - ): - """""" - self.main_engine = main_engine - self.event_engine = event_engine - self.engine_name = engine_name - - class MainEngine: """ Acts as the core of VN Trader. @@ -58,7 +42,7 @@ class MainEngine: self.init_engines() - def add_engine(self, engine_class: BaseEngine): + def add_engine(self, engine_class: Any): """ Add function engine. """ @@ -149,6 +133,23 @@ class MainEngine: self.event_engine.stop() +class BaseEngine(ABC): + """ + Abstract class for implementing an function engine. + """ + + def __init__( + self, + main_engine: MainEngine, + event_engine: EventEngine, + engine_name: str + ): + """""" + self.main_engine = main_engine + self.event_engine = event_engine + self.engine_name = engine_name + + class LogEngine(BaseEngine): """ Processes log event and output with logging module. @@ -227,7 +228,7 @@ class OmsEngine(BaseEngine): def __init__(self, main_engine: MainEngine, event_engine: EventEngine): """""" - super(OmsEngine, self).__init__(main_engine, event_engine, oms) + super(OmsEngine, self).__init__(main_engine, event_engine, "oms") self.ticks = {} self.orders = {} diff --git a/vnpy/trader/gateway.py b/vnpy/trader/gateway.py index 56711bef..5acb74ed 100644 --- a/vnpy/trader/gateway.py +++ b/vnpy/trader/gateway.py @@ -3,6 +3,7 @@ """ from abc import ABC, abstractmethod +from typing import Any from vnpy.event import EventEngine, Event diff --git a/vnpy/trader/ui/__init__.py b/vnpy/trader/ui/__init__.py index 6bf350d0..6872f76e 100644 --- a/vnpy/trader/ui/__init__.py +++ b/vnpy/trader/ui/__init__.py @@ -1,5 +1,6 @@ import platform import ctypes +from pathlib import Path import qdarkstyle from PyQt5 import QtWidgets, QtGui @@ -7,6 +8,7 @@ from PyQt5 import QtWidgets, QtGui from .mainwindow import MainWindow from ..setting import SETTINGS + def create_qapp(): """ Create Qt Application. @@ -17,8 +19,14 @@ def create_qapp(): font = QtGui.QFont(SETTINGS["font.family"], SETTINGS["font.size"]) qapp.setFont(font) + ui_path = Path(__file__).parent + icon_path = ui_path.joinpath("ico", "vnpy.ico") + icon = QtGui.QIcon(str(icon_path)) + qapp.setWindowIcon(icon) + if 'Windows' in platform.uname(): ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID( - 'VN Trader') + 'VN Trader' + ) return qapp \ No newline at end of file diff --git a/vnpy/trader/ui/ico/about.ico b/vnpy/trader/ui/ico/about.ico new file mode 100644 index 0000000000000000000000000000000000000000..10686551705cad91b3f2946c18ecd70603696d7b GIT binary patch literal 67646 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 M>xR1idHIk38&_$W4FCWD literal 0 HcmV?d00001 diff --git a/vnpy/trader/ui/ico/connect.ico b/vnpy/trader/ui/ico/connect.ico new file mode 100644 index 0000000000000000000000000000000000000000..ad638cb48806d87e58d624bf85273d6c7578d985 GIT binary patch literal 67646 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 b^cOY`Ue7PEF4rXtOQTOK59HRByMFWkXz8#S literal 0 HcmV?d00001 diff --git a/vnpy/trader/ui/ico/database.ico b/vnpy/trader/ui/ico/database.ico new file mode 100644 index 0000000000000000000000000000000000000000..6ad2845ebfc2361c42252d719f68d9772499843b GIT binary patch literal 63038 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 literal 0 HcmV?d00001 diff --git a/vnpy/trader/ui/ico/editor.ico b/vnpy/trader/ui/ico/editor.ico new file mode 100644 index 0000000000000000000000000000000000000000..e52273768ba59b89403ae24282c21560ef00e4e0 GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/vnpy/trader/ui/ico/exit.ico b/vnpy/trader/ui/ico/exit.ico new file mode 100644 index 0000000000000000000000000000000000000000..1ca8be52d3a0be1da50c7e903ccd3a688c4498b5 GIT binary patch literal 67134 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 literal 0 HcmV?d00001 diff --git a/vnpy/trader/ui/ico/restore.ico b/vnpy/trader/ui/ico/restore.ico new file mode 100644 index 0000000000000000000000000000000000000000..be9c617543e9ea16e19a84c5f964008763aae446 GIT binary patch literal 21662 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 literal 0 HcmV?d00001 diff --git a/vnpy/trader/ui/ico/vnpy.ico b/vnpy/trader/ui/ico/vnpy.ico new file mode 100644 index 0000000000000000000000000000000000000000..f5146d56ddaa2bfd38768598803f5019593fcd33 GIT binary patch literal 67646 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 literal 0 HcmV?d00001 diff --git a/vnpy/trader/ui/mainwindow.py b/vnpy/trader/ui/mainwindow.py index dd0f5dbb..28558798 100644 --- a/vnpy/trader/ui/mainwindow.py +++ b/vnpy/trader/ui/mainwindow.py @@ -1,7 +1,15 @@ -from PyQt5 import QtWidgets +from PyQt5 import QtWidgets, QtCore from vnpy.event import EventEngine from ..engine import MainEngine +from .widget import ( + TickMonitor, + OrderMonitor, + TradeMonitor, + PositionMonitor, + AccountMonitor, + LogMonitor +) class MainWindow(QtWidgets.QMainWindow): @@ -15,12 +23,43 @@ class MainWindow(QtWidgets.QMainWindow): self.main_engine = main_engine self.event_engine = event_engine + self.widgets = {} + self.init_ui() def init_ui(self): """""" self.setWindowTitle("VN Trader") + self.init_dock() + self.init_menu() - def register_event(self): + def init_dock(self): """""" - pass \ No newline at end of file + tick_widget, tick_dock = self.create_dock(TickMonitor, "行情", QtCore.Qt.RightDockWidgetArea) + order_widget, order_dock = self.create_dock(OrderMonitor, "委托", QtCore.Qt.RightDockWidgetArea) + trade_widget, trade_dock = self.create_dock(TradeMonitor, "成交", QtCore.Qt.RightDockWidgetArea) + log_widget, log_dock = self.create_dock(LogMonitor, "日志", QtCore.Qt.BottomDockWidgetArea) + account_widget, account_dock = self.create_dock(AccountMonitor, "资金", QtCore.Qt.BottomDockWidgetArea) + position_widget, position_dock = self.create_dock(PositionMonitor, "持仓", QtCore.Qt.BottomDockWidgetArea) + + def init_menu(self): + """""" + pass + + def create_dock( + self, + widget_class: QtWidgets.QWidget, + name: str, + area: int + ): + """ + Initialize a dock widget. + """ + widget = widget_class(self.main_engine, self.event_engine) + + dock = QtWidgets.QDockWidget(name) + dock.setWidget(widget) + dock.setObjectName(name) + dock.setFeatures(dock.DockWidgetFloatable | dock.DockWidgetMovable) + self.addDockWidget(area, dock) + return widget, dock \ No newline at end of file diff --git a/vnpy/trader/ui/widget.py b/vnpy/trader/ui/widget.py index b692a038..ae802ba2 100644 --- a/vnpy/trader/ui/widget.py +++ b/vnpy/trader/ui/widget.py @@ -581,5 +581,10 @@ class AccountMonitor(BaseMonitor): 'display': '可用', 'cell': BaseCell, 'update': True + }, + 'gateway_name': { + 'display': '接口', + 'cell': BaseCell, + 'update': False } } diff --git a/vnpy/trader/utility.py b/vnpy/trader/utility.py index fdeb8374..0cb9a7cf 100644 --- a/vnpy/trader/utility.py +++ b/vnpy/trader/utility.py @@ -50,4 +50,4 @@ def check_order_active(status: str): if status in ACTIVE_STATUSES: return True else: - return False \ No newline at end of file + return False