一、介绍
最近在看vnpy源码,其中有pyqt4的设计部分,将其提取出来用于以后参考。有些属于vnpy自有模块可直接跳过不看。
其中QApplication应用对象主要用于启用qt应用,并判断界面关闭退出,Qt MainWindow主要用于qt布局。
二、代码
1、run.py(启动入口):创建了Qt MainWindow主窗口对象以及引入Qt QApplication应用对象
# encoding: UTF-8
# 重载sys模块,设置默认字符串编码方式为utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
# vn.trader模块
# 事件引擎模块
from vnpy.event import EventEngine
from vnpy.trader.vtEngine import MainEngine
from vnpy.trader.uiQt import qApp
from vnpy.trader.uiMainWindow import MainWindow
# 加载底层接口
from vnpy.trader.gateway import ctpGateway
# 加载上层应用
from vnpy.trader.app import riskManager, ctaStrategy
#----------------------------------------------------------------------
def main():
"""主程序入口"""
# 创建事件引擎
ee = EventEngine()
# 创建主引擎
me = MainEngine(ee)
# 添加交易接口
me.addGateway(ctpGateway)
# 添加上层应用
me.addApp(riskManager)
me.addApp(ctaStrategy)
# 创建主窗口
mw = MainWindow(me, ee)
mw.showMaximized()
# 在主线程中启动Qt事件循环
# sys.exit 触发一个SystemExit异常用于退出时处理一些东西
# 窗口退出
sys.exit(qApp.exec_())
if __name__ == '__main__':
main()
2、uiQt.py创建了Qt应用对象,并对其设置了些基本设置。
# encoding: UTF-8
# 获取操作系统信息模块
import platform
from qtpy import QtWidgets, QtGui, QtCore
from vnpy.trader.vtGlobal import globalSetting
from vnpy.trader.vtFunction import loadIconPath
# 创建Qt应用对象
qApp = QtWidgets.QApplication([])
# 设置Qt的皮肤
if globalSetting['darkStyle']:
try:
import qdarkstyle
qApp.setStyleSheet(qdarkstyle.load_stylesheet(pyside=False))
except ImportError:
pass
# 设置Windows底部任务栏图标
if 'Windows' in platform.uname():
# ctypes提供与C语言兼容数据类型,易于调用DLL中函数
import ctypes
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('vn.trader')
# 设置Qt字体
try:
family = globalSetting['fontFamily']
size = globalSetting['fontSize']
BASIC_FONT = QtGui.QFont(family, size)
except:
BASIC_FONT = QtGui.QFont(u'微软雅黑', 12)
qApp.setFont(BASIC_FONT)
# 设置Qt图标
qApp.setWindowIcon(QtGui.QIcon(loadIconPath('vnpy.ico')))