最近在看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')))