def __init__(self, analysisEngine): # 初始化方法 QtGui.QWidget.__init__(self) # 调用父类初始化方法 self.setWindowTitle('NetCurve') # 设置窗口标题 self.path = os.getcwd() + '/ctaLogFile/ctaPosFile' # self.path = os.getcwd() + '/statement/netSource' self.analysisEngine = analysisEngine # self.resize(300,200) # 设置窗口大小 gridlayout = QtGui.QGridLayout() # 创建布局组件 self.cbAccount = QtGui.QComboBox() self.cbContract = QtGui.QComboBox() self.buttonStart = QtGui.QPushButton() self.lineedit = QtGui.QLineEdit('1000000') self.labelAcct = QtGui.QLabel(u'账户') self.labelCon = QtGui.QLabel(u'标的') self.labelAmount = QtGui.QLabel(u'初始金额') self.labelEvaluate = QtGui.QLabel() tree = lambda: collections.defaultdict(tree) self.dataList = tree() self.fileName = [] self.loadAllPosFile() self.cbAccount.addItems( [k for k in self.groupByPosFile('name').keys()]) self.cbContract.addItems( [k for k in self.groupByPosFile('contract').keys()])
def initUi(self): """初始化界面""" self.setWindowTitle(text.DATA_RECORDER) # 记录合约配置监控 tickLabel = QtGui.QLabel(text.TICK_RECORD) self.tickTable = QtGui.QTableWidget() self.tickTable.setColumnCount(2) self.tickTable.verticalHeader().setVisible(False) self.tickTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.tickTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.tickTable.setAlternatingRowColors(True) self.tickTable.setHorizontalHeaderLabels( [text.CONTRACT_SYMBOL, text.GATEWAY]) barLabel = QtGui.QLabel(text.BAR_RECORD) self.barTable = QtGui.QTableWidget() self.barTable.setColumnCount(2) self.barTable.verticalHeader().setVisible(False) self.barTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.barTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.barTable.setAlternatingRowColors(True) self.barTable.setHorizontalHeaderLabels( [text.CONTRACT_SYMBOL, text.GATEWAY]) activeLabel = QtGui.QLabel(text.DOMINANT_CONTRACT) self.activeTable = QtGui.QTableWidget() self.activeTable.setColumnCount(2) self.activeTable.verticalHeader().setVisible(False) self.activeTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.activeTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.activeTable.setAlternatingRowColors(True) self.activeTable.setHorizontalHeaderLabels( [text.DOMINANT_SYMBOL, text.CONTRACT_SYMBOL]) # 日志监控 self.logMonitor = QtGui.QTextEdit() self.logMonitor.setReadOnly(True) self.logMonitor.setMinimumHeight(600) # 设置布局 grid = QtGui.QGridLayout() grid.addWidget(tickLabel, 0, 0) grid.addWidget(barLabel, 0, 1) grid.addWidget(activeLabel, 0, 2) grid.addWidget(self.tickTable, 1, 0) grid.addWidget(self.barTable, 1, 1) grid.addWidget(self.activeTable, 1, 2) vbox = QtGui.QVBoxLayout() vbox.addLayout(grid) vbox.addWidget(self.logMonitor) self.setLayout(vbox)
def initUi(self): """初始化界面""" self.setWindowTitle(u'行情数据记录工具') # 记录合约配置监控 tickLabel = QtGui.QLabel(u'Tick记录') self.tickTable = QtGui.QTableWidget() self.tickTable.setColumnCount(2) self.tickTable.verticalHeader().setVisible(False) self.tickTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.tickTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.tickTable.setAlternatingRowColors(True) self.tickTable.setHorizontalHeaderLabels([u'合约代码', u'接口']) barLabel = QtGui.QLabel(u'Bar记录') self.barTable = QtGui.QTableWidget() self.barTable.setColumnCount(2) self.barTable.verticalHeader().setVisible(False) self.barTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.barTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.barTable.setAlternatingRowColors(True) self.barTable.setHorizontalHeaderLabels([u'合约代码', u'接口']) activeLabel = QtGui.QLabel(u'主力合约') self.activeTable = QtGui.QTableWidget() self.activeTable.setColumnCount(2) self.activeTable.verticalHeader().setVisible(False) self.activeTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.activeTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.activeTable.setAlternatingRowColors(True) self.activeTable.setHorizontalHeaderLabels([u'主力代码', u'合约代码']) # 日志监控 self.logMonitor = QtGui.QTextEdit() self.logMonitor.setReadOnly(True) self.logMonitor.setMinimumHeight(300) # 设置布局 grid = QtGui.QGridLayout() grid.addWidget(tickLabel, 0, 0) grid.addWidget(barLabel, 0, 1) grid.addWidget(activeLabel, 0, 2) grid.addWidget(self.tickTable, 1, 0) grid.addWidget(self.barTable, 1, 1) grid.addWidget(self.activeTable, 1, 2) vbox = QtGui.QVBoxLayout() vbox.addLayout(grid) vbox.addWidget(self.logMonitor) self.setLayout(vbox)
def initUi(self): """初始化界面""" self.setWindowTitle(u'登录') # 设置界面 self.userName = QtGui.QLineEdit() self.password = QtGui.QTextEdit() self.comboStrategy = QtGui.QComboBox() grid = QtGui.QGridLayout() grid.addWidget(LoginLine(), 1, 0, 1, 2) grid.addWidget(QtGui.QLabel(u'用户名'), 2, 0) grid.addWidget(self.userName, 2, 1) grid.addWidget(QtGui.QLabel(u'令牌'), 3, 0) grid.addWidget(self.password, 3, 1) grid.addWidget(LoginLine(), 4, 0, 1, 2) grid.addWidget(QtGui.QLabel(u'策略'), 5, 0) grid.addWidget(self.comboStrategy, 5, 1) grid.addWidget(LoginLine(), 6, 0, 1, 2) self.buttonCancel = QtGui.QPushButton(u'取消') self.buttonConfirm = QtGui.QPushButton(u'确认') hbox = QtGui.QHBoxLayout() hbox.addWidget(self.buttonConfirm) hbox.addWidget(self.buttonCancel) self.buttonConfirm.setDefault(True) vbox = QtGui.QVBoxLayout() vbox.addLayout(grid) vbox.addLayout(hbox) self.setLayout(vbox) # 设为固定大小 self.setFixedSize(self.sizeHint()) self.buttonCancel.clicked.connect(self.close) self.buttonConfirm.clicked.connect(self.login) self.userName.returnPressed.connect(self.password.setFocus) # init username & token username = self.setting['username'] token = self.setting['token'] self.userName.setText(username) self.password.setText(token)
def initUI(self): self.resize(350, 480) #self.tradeTestButton.move(50,20) #self.tradeTestButton.resize(160,50) #self.girdTradingButton.move(50,90) #self.girdTradingButton.resize(160,50) #self.CtpAndIB.move(50,160) #self.CtpAndIB.resize(160,50) #self.moreStrategyCoding.move(50,230) #self.moreStrategyCoding.resize(160,50) layout = QtGui.QGridLayout(self) layout.addWidget(self.tradeTestButton, 0, 0) layout.addWidget(self.girdTradingButton, 1, 0) layout.addWidget(self.CtpAndIB, 2, 0) layout.addWidget(self.Arbitrage, 3, 0) layout.addWidget(self.moreStrategyCoding, 4, 0) self.setLayout(layout) self.center()
def initUi(self): """""" QtGui.QWidget.__init__(self) # 调用父类初始化方法 self.setWindowTitle(u'设置参数') self.resize(300,400) # 设置窗口大小 gridlayout = QtGui.QGridLayout() # 创建布局组件 i = 0 lName = QtGui.QLabel(u'参数') lValue = QtGui.QLabel(u'数值') gridlayout.addWidget(lName, i, 0 ) gridlayout.addWidget(lValue, i, 1 ) for name in self.paramDict: i += 1 label = QtGui.QLabel(name) # 创建单选框 self.valueEdit[name] = QtGui.QLineEdit() self.valueEdit[name].setText(str(self.paramDict[name])) self.valueEdit[name].setFocusPolicy(QtCore.Qt.NoFocus) gridlayout.addWidget(label, i, 0 ) # 添加文本 gridlayout.addWidget(self.valueEdit[name], i, 1) # 添加文本框 vbox = QtGui.QVBoxLayout() vbox.addLayout(gridlayout) self.addButton(vbox) self.setLayout(vbox)
def initUi(self): """初始化界面""" self.setWindowTitle(u'风险管理') # 设置界面 self.buttonSwitchEngineStatus = QtGui.QPushButton(u'风控模块未启动') self.spinOrderFlowLimit = RmSpinBox(self.rmEngine.orderFlowLimit) self.spinOrderFlowClear = RmSpinBox(self.rmEngine.orderFlowClear) self.spinOrderSizeLimit = RmSpinBox(self.rmEngine.orderSizeLimit) self.spinTradeLimit = RmSpinBox(self.rmEngine.tradeLimit) self.spinWorkingOrderLimit = RmSpinBox(self.rmEngine.workingOrderLimit) self.spinOrderCancelLimit = RmSpinBox(self.rmEngine.orderCancelLimit) buttonClearOrderFlowCount = QtGui.QPushButton(u'清空流控计数') buttonClearTradeCount = QtGui.QPushButton(u'清空总成交计数') buttonSaveSetting = QtGui.QPushButton(u'保存设置') Label = QtGui.QLabel grid = QtGui.QGridLayout() grid.addWidget(Label(u'工作状态'), 0, 0) grid.addWidget(self.buttonSwitchEngineStatus, 0, 1) grid.addWidget(RmLine(), 1, 0, 1, 2) grid.addWidget(Label(u'流控上限'), 2, 0) grid.addWidget(self.spinOrderFlowLimit, 2, 1) grid.addWidget(Label(u'流控清空(秒)'), 3, 0) grid.addWidget(self.spinOrderFlowClear, 3, 1) grid.addWidget(RmLine(), 4, 0, 1, 2) grid.addWidget(Label(u'单笔委托上限'), 5, 0) grid.addWidget(self.spinOrderSizeLimit, 5, 1) grid.addWidget(RmLine(), 6, 0, 1, 2) grid.addWidget(Label(u'总成交上限'), 7, 0) grid.addWidget(self.spinTradeLimit, 7, 1) grid.addWidget(RmLine(), 8, 0, 1, 2) grid.addWidget(Label(u'活动订单上限'), 9, 0) grid.addWidget(self.spinWorkingOrderLimit, 9, 1) grid.addWidget(RmLine(), 10, 0, 1, 2) grid.addWidget(Label(u'单合约撤单上限'), 11, 0) grid.addWidget(self.spinOrderCancelLimit, 11, 1) hbox = QtGui.QHBoxLayout() hbox.addWidget(buttonClearOrderFlowCount) hbox.addWidget(buttonClearTradeCount) hbox.addStretch() hbox.addWidget(buttonSaveSetting) vbox = QtGui.QVBoxLayout() vbox.addLayout(grid) vbox.addLayout(hbox) self.setLayout(vbox) # 连接组件信号 self.spinOrderFlowLimit.valueChanged.connect( self.rmEngine.setOrderFlowLimit) self.spinOrderFlowClear.valueChanged.connect( self.rmEngine.setOrderFlowClear) self.spinOrderSizeLimit.valueChanged.connect( self.rmEngine.setOrderSizeLimit) self.spinTradeLimit.valueChanged.connect(self.rmEngine.setTradeLimit) self.spinWorkingOrderLimit.valueChanged.connect( self.rmEngine.setWorkingOrderLimit) self.spinOrderCancelLimit.valueChanged.connect( self.rmEngine.setOrderCancelLimit) self.buttonSwitchEngineStatus.clicked.connect(self.switchEngineSatus) buttonClearOrderFlowCount.clicked.connect( self.rmEngine.clearOrderFlowCount) buttonClearTradeCount.clicked.connect(self.rmEngine.clearTradeCount) buttonSaveSetting.clicked.connect(self.rmEngine.saveSetting) # 设为固定大小 self.setFixedSize(self.sizeHint())
def initUi(self): """初始化界面""" self.setWindowTitle(text.RISK_MANAGER) # 设置界面 self.buttonSwitchEngineStatus = QtGui.QPushButton( text.RISK_MANAGER_STOP) self.spinOrderFlowLimit = RmSpinBox(self.rmEngine.orderFlowLimit) self.spinOrderFlowClear = RmSpinBox(self.rmEngine.orderFlowClear) self.spinOrderSizeLimit = RmSpinBox(self.rmEngine.orderSizeLimit) self.spinTradeLimit = RmSpinBox(self.rmEngine.tradeLimit) self.spinWorkingOrderLimit = RmSpinBox(self.rmEngine.workingOrderLimit) self.spinOrderCancelLimit = RmSpinBox(self.rmEngine.orderCancelLimit) buttonClearOrderFlowCount = QtGui.QPushButton( text.CLEAR_ORDER_FLOW_COUNT) buttonClearTradeCount = QtGui.QPushButton(text.CLEAR_TOTAL_FILL_COUNT) buttonSaveSetting = QtGui.QPushButton(text.SAVE_SETTING) Label = QtGui.QLabel grid = QtGui.QGridLayout() grid.addWidget(Label(text.WORKING_STATUS), 0, 0) grid.addWidget(self.buttonSwitchEngineStatus, 0, 1) grid.addWidget(RmLine(), 1, 0, 1, 2) grid.addWidget(Label(text.ORDER_FLOW_LIMIT), 2, 0) grid.addWidget(self.spinOrderFlowLimit, 2, 1) grid.addWidget(Label(text.ORDER_FLOW_CLEAR), 3, 0) grid.addWidget(self.spinOrderFlowClear, 3, 1) grid.addWidget(RmLine(), 4, 0, 1, 2) grid.addWidget(Label(text.ORDER_SIZE_LIMIT), 5, 0) grid.addWidget(self.spinOrderSizeLimit, 5, 1) grid.addWidget(RmLine(), 6, 0, 1, 2) grid.addWidget(Label(text.TOTAL_TRADE_LIMIT), 7, 0) grid.addWidget(self.spinTradeLimit, 7, 1) grid.addWidget(RmLine(), 8, 0, 1, 2) grid.addWidget(Label(text.WORKING_ORDER_LIMIT), 9, 0) grid.addWidget(self.spinWorkingOrderLimit, 9, 1) grid.addWidget(RmLine(), 10, 0, 1, 2) grid.addWidget(Label(text.CONTRACT_CANCEL_LIMIT), 11, 0) grid.addWidget(self.spinOrderCancelLimit, 11, 1) hbox = QtGui.QHBoxLayout() hbox.addWidget(buttonClearOrderFlowCount) hbox.addWidget(buttonClearTradeCount) hbox.addStretch() hbox.addWidget(buttonSaveSetting) vbox = QtGui.QVBoxLayout() vbox.addLayout(grid) vbox.addLayout(hbox) self.setLayout(vbox) # 连接组件信号 self.spinOrderFlowLimit.valueChanged.connect( self.rmEngine.setOrderFlowLimit) self.spinOrderFlowClear.valueChanged.connect( self.rmEngine.setOrderFlowClear) self.spinOrderSizeLimit.valueChanged.connect( self.rmEngine.setOrderSizeLimit) self.spinTradeLimit.valueChanged.connect(self.rmEngine.setTradeLimit) self.spinWorkingOrderLimit.valueChanged.connect( self.rmEngine.setWorkingOrderLimit) self.spinOrderCancelLimit.valueChanged.connect( self.rmEngine.setOrderCancelLimit) self.buttonSwitchEngineStatus.clicked.connect(self.switchEngineSatus) buttonClearOrderFlowCount.clicked.connect( self.rmEngine.clearOrderFlowCount) buttonClearTradeCount.clicked.connect(self.rmEngine.clearTradeCount) buttonSaveSetting.clicked.connect(self.rmEngine.saveSetting) # 设为固定大小 self.setFixedSize(self.sizeHint())
def initUi(self): """初始化界面""" self.setWindowTitle(u'行情数据记录工具') # 菜单 lineSelect = QtGui.QLabel(u'需要收集的合约:') buttonSelect = QtGui.QPushButton(u'选择') lineType = QtGui.QLabel(u'合成Bar类型:') barType = ['1m', '5m', '15m', '30m', '60m'] comboType = QtGui.QComboBox() comboType.addItems(barType) lineStart = QtGui.QLabel(u'开始收集:') buttonStart = QtGui.QPushButton(u'收集') buttonSelect.clicked.connect(self.select) buttonStart.clicked.connect(self.start) # 记录合约配置监控 tickLabel = QtGui.QLabel(u'Tick记录') self.tickTable = QtGui.QTableWidget() self.tickTable.setColumnCount(2) self.tickTable.verticalHeader().setVisible(False) self.tickTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.tickTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.tickTable.setAlternatingRowColors(True) self.tickTable.setHorizontalHeaderLabels([u'合约代码', u'接口']) barLabel = QtGui.QLabel(u'Bar记录') self.barTable = QtGui.QTableWidget() self.barTable.setColumnCount(2) self.barTable.verticalHeader().setVisible(False) self.barTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.barTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.barTable.setAlternatingRowColors(True) self.barTable.setHorizontalHeaderLabels([u'合约代码', u'接口']) activeLabel = QtGui.QLabel(u'主力合约') self.activeTable = QtGui.QTableWidget() self.activeTable.setColumnCount(2) self.activeTable.verticalHeader().setVisible(False) self.activeTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.activeTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.activeTable.setAlternatingRowColors(True) self.activeTable.setHorizontalHeaderLabels([u'主力代码', u'合约代码']) # 日志监控 self.logMonitor = QtGui.QTextEdit() self.logMonitor.setReadOnly(True) self.logMonitor.setMinimumHeight(600) self.logMonitor2 = QtGui.QTextEdit() self.logMonitor2.setReadOnly(True) self.logMonitor2.setMinimumHeight(600) self.logMonitor3 = QtGui.QTextEdit() self.logMonitor3.setReadOnly(True) self.logMonitor3.setMinimumHeight(600) # 设置布局 hbox = QtGui.QHBoxLayout() hbox.addWidget(lineSelect) hbox.addWidget(buttonSelect) hbox.addWidget(lineType) hbox.addWidget(comboType) hbox.addWidget(lineStart) hbox.addWidget(buttonStart) grid = QtGui.QGridLayout() grid.addWidget(tickLabel, 0, 0) grid.addWidget(barLabel, 0, 1) grid.addWidget(activeLabel, 0, 2) grid.addWidget(self.tickTable, 1, 0) grid.addWidget(self.barTable, 1, 1) grid.addWidget(self.activeTable, 1, 2) grid2 = QtGui.QGridLayout() grid2.addWidget(self.logMonitor, 0, 0) grid2.addWidget(self.logMonitor2, 0, 1) grid2.addWidget(self.logMonitor3, 0, 2) vbox = QtGui.QVBoxLayout() vbox.addLayout(hbox) vbox.addLayout(grid) vbox.addLayout(grid2) self.setLayout(vbox)
def initUi(self): """初始化界面""" self.setWindowTitle(u'风险管理') # 设置界面 self.buttonSwitchEngineStatus = QtGui.QPushButton(u'风控模块未启动') # self.spinaccountMarginRatio = RmSpinBox(self.rmEngine.accountMarginRatio) # self.spintradeCountLimit = RmSpinBox(self.rmEngine.tradeCountLimit) # self.spinstrategyInstanceOpenLimit = RmSpinBox(self.rmEngine.strategyInstanceOpenLimit) # self.spinstrategyInstancePositionLimit = RmSpinBox(self.rmEngine.strategyInstancePositionLimit) # self.spincontractPositionLimit = RmSpinBox(self.rmEngine.contractPositionLimit) # buttonClearOrderFlowCount = QtGui.QPushButton(u'清空流控计数') # buttonClearTradeCount = QtGui.QPushButton(u'清空累计交易计数') # buttonSaveSetting = QtGui.QPushButton(u'保存设置') # Label = QtGui.QLabel # grid = QtGui.QGridLayout() # grid.addWidget(Label(u'工作状态'), 0, 0) # grid.addWidget(self.buttonSwitchEngineStatus, 0, 1) # grid.addWidget(RmLine(), 1, 0, 1, 2) # grid.addWidget(Label(u'账户保证金比例上限'), 2, 0) # grid.addWidget(self.spinaccountMarginRatio, 2, 1) # # grid.addWidget(Label(u'流控清空(秒)'), 3, 0) # # grid.addWidget(self.spinOrderFlowClear, 3, 1) # grid.addWidget(RmLine(), 3, 0, 1, 2) # grid.addWidget(Label(u'单日累计交易次数上限'), 4, 0) # grid.addWidget(self.spintradeCountLimit, 4, 1) # grid.addWidget(RmLine(), 5, 0, 1, 2) # grid.addWidget(Label(u'单策略实例开仓上限'), 6, 0) # grid.addWidget(self.spinstrategyInstanceOpenLimit, 6, 1) # grid.addWidget(RmLine(), 7, 0, 1, 2) # grid.addWidget(Label(u'单策略实例持仓上限'), 8, 0) # grid.addWidget(self.spinstrategyInstancePositionLimit, 8, 1) # hbox = QtGui.QHBoxLayout() # hbox.addWidget(buttonSwitchEngineStatus) # hbox.addWidget(buttonClearTradeCount) # hbox.addStretch() # hbox.addWidget(buttonSaveSetting) # vbox = QtGui.QVBoxLayout() # vbox.addLayout(grid) # vbox.addLayout(hbox) # self.setLayout(vbox) # # 连接组件信号 # self.spinaccountMarginRatio.valueChanged.connect(self.rmEngine.setAccountMarginRatio) # self.spintradeCountLimit.valueChanged.connect(self.rmEngine.setTradeCountLimit) # self.spinstrategyInstanceOpenLimit.valueChanged.connect(self.rmEngine.setStrategyInstanceOpenLimit) # self.spinstrategyInstancePositionLimit.valueChanged.connect(self.rmEngine.setStrategyInstancePositionLimit) # self.spincontractPositionLimit.valueChanged.connect(self.rmEngine.setContractPositionLimit) # self.buttonSwitchEngineStatus.clicked.connect(self.switchEngineStatus) # buttonClearOrderFlowCount.clicked.connect(self.rmEngine.clearOrderFlowCount) # buttonClearTradeCount.clicked.connect(self.rmEngine.clearTradeCount) # buttonSaveSetting.clicked.connect(self.rmEngine.saveSetting) buttonHBox = QtGui.QHBoxLayout() buttonHBox.addStretch() buttonHBox.addWidget(self.buttonSwitchEngineStatus) grid = QtGui.QGridLayout() grid.addLayout(buttonHBox, 0, 0, 1, 1) self.setLayout(grid) # 设为固定大小 self.setFixedSize(self.sizeHint())
def initUi(self): """初始化界面""" self.setWindowTitle(text.DATA_RECORDER) # 记录合约配置监控 tickLabel = QtGui.QLabel(text.TICK_RECORD) self.tickTable = QtGui.QTableWidget() self.tickTable.setColumnCount(2) self.tickTable.verticalHeader().setVisible(False) self.tickTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.tickTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.tickTable.setAlternatingRowColors(True) self.tickTable.setHorizontalHeaderLabels( [text.CONTRACT_SYMBOL, text.GATEWAY]) barLabel = QtGui.QLabel(text.BAR_RECORD) self.barTable = QtGui.QTableWidget() self.barTable.setColumnCount(2) self.barTable.verticalHeader().setVisible(False) self.barTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.barTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.barTable.setAlternatingRowColors(True) self.barTable.setHorizontalHeaderLabels( [text.CONTRACT_SYMBOL, text.GATEWAY]) activeLabel = QtGui.QLabel(text.DOMINANT_CONTRACT) self.activeTable = QtGui.QTableWidget() self.activeTable.setColumnCount(2) self.activeTable.verticalHeader().setVisible(False) self.activeTable.setEditTriggers(QtGui.QTableWidget.NoEditTriggers) self.activeTable.horizontalHeader().setResizeMode( QtGui.QHeaderView.Stretch) self.activeTable.setAlternatingRowColors(True) self.activeTable.setHorizontalHeaderLabels( [text.DOMINANT_SYMBOL, text.CONTRACT_SYMBOL]) # 日志监控 self.logMonitor = QtGui.QTextEdit() self.logMonitor.setReadOnly(True) self.logMonitor.setMinimumHeight(600) # 设置布局 grid = QtGui.QGridLayout() grid.addWidget(tickLabel, 0, 0) grid.addWidget(barLabel, 0, 1) grid.addWidget(activeLabel, 0, 2) grid.addWidget(self.tickTable, 1, 0) grid.addWidget(self.barTable, 1, 1) grid.addWidget(self.activeTable, 1, 2) # 原有的布局结构 -> 备份 # vbox = QtGui.QVBoxLayout() # vbox.addLayout(grid) # vbox.addWidget(self.logMonitor) # self.setLayout(vbox) vbox = QtGui.QVBoxLayout() vbox.addLayout(grid) # 在底部增加的一个可切换组件,有价格图和行情两个界面 bottomWidget = QtGui.QTabWidget() priceWidget = PriceWidget(self.eventEngine, self.drEngine) bottomWidget.addTab(priceWidget, u'Price') bottomWidget.addTab(self.logMonitor, u'行情') vbox.addWidget(bottomWidget) self.setLayout(vbox)