目標: 將倉位接受物件內之倉位資訊填入QtTableWidget
先熱身, 複習之前學到的重點:
Slot物件/Slot函數的設定
設定【送信員】, 【收信人】
##############################################################################
# Qt Signal/Slot
##############################################################################
# 信号对象
class QTypeSignal(QObject):
# 定义一个信号
sendmsg = pyqtSignal(object)
def __init__(self):
super(QTypeSignal, self).__init__() #super() 函数是用于调用父类(超类)的一个方法。
def run(self, msg):
# 发射信号
self.sendmsg.emit(msg)
# 槽对象
class QTypeSlot(QObject):
def __init__(self):
super(QTypeSlot, self).__init__()
# 槽物件Slot里的槽函数
def get(self, msg):
#print("QSlot get msg => ")
myWin.showMessage(msg) #Slot函數
def OnNotifyQuoteLONG(self, sMarketNo, nStockidx): #ctw # 3-【查詢】回報
pStock = sk.SKSTOCKLONG()
m_nCode = skQ.SKQuoteLib_GetStockByIndexLONG(sMarketNo, nStockidx, pStock)
strMsg = '代碼:',pStock.bstrStockNo,'--名稱:',pStock.bstrStockName,'--開盤價:',str(pStock.nOpen/math.pow(10,pStock.sDecimal)),'--最高:',\
str(pStock.nHigh/math.pow(10,pStock.sDecimal)),'--最低:',\
str(pStock.nLow/math.pow(10,pStock.sDecimal)),'--成交價:',str(pStock.nClose/math.pow(10,pStock.sDecimal))\
,'--總量:',str(pStock.nTQty)
twStrMsg=twTuple_2_Str(strMsg)
send.run(twStrMsg) #發射Signal訊號
# --------------------------> key point 2: Tick Event
def OnNotifyHistoryTicksLONG(self, sMarketNo, nStockidx, nPtr, lDate, lTimehms, lTimemillismicros, nBid, nAsk, nClose, nQty, nSimulate):
# 4-【查詢歷史Tick】回報
strMsg = "[OnNotifyHistoryTicksLONG]", nStockidx, nPtr, lDate, lTimehms, lTimemillismicros, nBid, nAsk, nClose, nQty, nSimulate
twStrMsg=twTuple_2_Str(strMsg)
send.run(twStrMsg) #發射Signal訊號
#WriteMessage(strMsg,Gobal_Tick_ListInformation)
tw_full_time = twTimeConv(lDate, lTimehms, lTimemillismicros) #ctw
twGlobal.twClose.Add(tw_full_time,float(nClose/100), nQty) #ctw
twGlobal.twKBar1M.Add(tw_full_time,float(nClose/100), nQty) #ctw
設定【收信人】該進行的動作
自訂Signal/Slot的連接
主程式中send signal的Signal物件send
##############################################################################
# 主程式
##############################################################################
if __name__=="__main__":
app = QApplication(sys.argv)
myWin = MyMainWindow()
myWin.show()
send = QTypeSignal()
slot = QTypeSlot()
# 1
print('--- 把信号绑定到槽函数 ---')
send.sendmsg.connect(slot.get)
#send.run()
# 2
#print('--- 把信号断开槽函数 ---')
#send.sendmsg.disconnect(slot.get)
#send.run()
sys.exit(app.exec())
class MyMainWindow(QMainWindow, Ui_Form):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.twTest1) #ctw signal
self.pushButton_2.clicked.connect(self.twTest2) #ctw signal
self.pushButton_3.clicked.connect(self.twTest3) #ctw signal
self.pushButton_4.clicked.connect(self.twTest8) #ctw signal
self.pushButton_5.clicked.connect(self.twTest4) #ctw signal
self.pushButton_6.clicked.connect(self.twTest5) #ctw signal
self.pushButton_7.clicked.connect(self.twTest6) #ctw signal
self.pushButton_8.clicked.connect(self.twTest7) #ctw signal
self.pushButton_9.clicked.connect(self.twTest9) #ctw signal
self.pushButton_10.clicked.connect(self.twTest10) #ctw signal
self.pushButton_11.clicked.connect(self.twTest11) #ctw signal
def twTest1(self): #ctw slot function
print("1-登入")
self.listWidget.addItem("1-登入")
twLogin(ID, PW)
def twTest11(self): #ctw slot function
print("11-倉位查詢")
self.listWidget.addItem("9-倉位查詢")
self.listWidget.addItem("m_nCode1: " + str(twSKO3_GetAccount()))
self.listWidget.addItem("m_nCode2: " + str(twSKO4_GetOpenInterest(ID, ACCOUNT)))
self.tableWidget.setItem(1,1,
QTableWidgetItem("倉位查詢"))
#listWidget.addItem("m_nCode2: " + str(twSKO4_GetOpenInterest(ID, ACCOUNT)))
#self.listWidget.addItem("m_nCode: " + str(twDisconnect()))
def showMessage(self, msg):
self.listWidget.addItem(msg)
#global GlobalListInformation,Global_ID
#GlobalListInformation = self.listWidget
#Global_ID = self.labelID
開始改碼:
call_twMain.py(修正1)
# 自訂Signal信号物件
class QTypeSignal(QObject):
# 定义一个信号
sendmsg = pyqtSignal(object)
sendmsg1 = pyqtSignal(object)
def __init__(self):
super(QTypeSignal, self).__init__() #super() 函数是用于调用父类(超类)的一个方法。
def run(self, msg): # 发射信号給QList
self.sendmsg.emit(msg)
def signal_to_qtable(self, msg): # 发射信号給QList
self.sendmsg1.emit(msg)
# 自訂Slot槽物件
class QTypeSlot(QObject):
def __init__(self):
super(QTypeSlot, self).__init__()
# 槽对象里的槽函数
def get(self, msg):
#print("QSlot get msg => ")
myWin.showMessage(msg) #Slot函數
def get_from_interest_signal(self, msg): # 槽对象里的槽函数
myWin.showMessage(msg) #Slot函數
##############################################################################
# 主程式
##############################################################################
if __name__=="__main__":
app = QApplication(sys.argv)
myWin = MyMainWindow()
myWin.show()
send = QTypeSignal()
slot = QTypeSlot()
# 1
print('--- 把信号绑定到槽函数 ---')
send.sendmsg.connect(slot.get)
send.sendmsg1.connect(slot.get_from_interest_signal)
#send.run()
# 2
#print('--- 把信号断开槽函数 ---')
#send.sendmsg.disconnect(slot.get)
#send.run()
設定【送信員】進行送信動作
def OnOpenInterest(self,bstrData):
#self.__obj["msg"].WriteMessage(bstrData,GlobalListInformation)
print(bstrData)
strValues = bstrData.split(',')
#strInterest = strValues[1] + strValues[3]
#strValues[2]: 商品名稱
#strValues[3]: 買賣(B/S)
#strValues[4]: 口數
if strValues[0] != '##':
twGlobal.twInterest.Add(strValues[2] ,strValues[3] , strValues[4] ) #ctw
else: # 倉位全部接收完畢後, 將倉位填入QtTableWidget中
send.signal_to_qtable(twTuple_2_Str(twGlobal.twInterest.GetName())) #發射Signal訊號給QtTable顯示函式
#pass
call_twMain.py(修正2)
def OnOpenInterest(self,bstrData):
#self.__obj["msg"].WriteMessage(bstrData,GlobalListInformation)
print(bstrData)
strValues = bstrData.split(',')
#strInterest = strValues[1] + strValues[3]
#strValues[2]: 商品名稱
#strValues[3]: 買賣(B/S)
#strValues[4]: 口數
if strValues[0] != '##':
twGlobal.twInterest.Add(strValues[2] ,strValues[3] , strValues[4] ) #ctw
else: # 倉位全部接收完畢後, 將倉位填入QtTableWidget中
pass
send.run(twStrMsg) #發射Signal訊號給QtTable顯示函式
設定【收信人】該進行的動作
def showMessage(self, msg):
self.listWidget.addItem(msg)
#global GlobalListInformation,Global_ID
#GlobalListInformation = self.listWidget
#Global_ID = self.labelID
def showInterest(self, msg):
self.tableWidget.setItem(2,1,QTableWidgetItem("interest"))
call_twMain.py(修正3)
# 自訂Slot槽物件
class QTypeSlot(QObject):
def __init__(self):
super(QTypeSlot, self).__init__()
# 槽对象里的槽函数
def get(self, msg):
#print("QSlot get msg => ")
myWin.showMessage(msg) #Slot函數
def get_from_interest_signal(self, msg): # 槽对象里的槽函数
#print("QSlot get msg => ")
myWin.showInterest(msg) #Slot函數
成功送出訊息到QTableWidget..
call_twMain.py(修正4) def showInterest(self, msg):
self.tableWidget.setItem(2,1,QTableWidgetItem(msg))
call_twMain.py(修正5)
def showInterest(self, msg): #自己讀取twInterestModel倉位物件
#twGlobal.twInterest.GetName()
for i in range(len(twGlobal.twInterest.GetName())):
self.tableWidget.setItem(i,1,QTableWidgetItem(twGlobal.twInterest.GetName()[i]))
call_twMain.py(修正6)
def showInterest(self, msg): #自己讀取twInterestModel倉位物件
#twGlobal.twInterest.GetName()
for i in range(len(twGlobal.twInterest.GetName())):
self.tableWidget.setItem(i,0,QTableWidgetItem(twGlobal.twInterest.GetName()[i]))
self.tableWidget.setItem(i,1,QTableWidgetItem(twGlobal.twInterest.GetBuySell()[i]))
self.tableWidget.setItem(i,2,QTableWidgetItem(twGlobal.twInterest.GetVolume()[i]))
沒有留言:
張貼留言