Pyqt4 vnpy源码中关于GUI设计 1

时间:2022-08-15 22:59:43

一、介绍

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