【发布时间】:2021-12-06 13:14:37
【问题描述】:
我是 python 的新手,来自 Java,我想更新初始化类中的变量
这是我的完整代码
import datetime import time import threading
from tkinter import * from ibapi.client import EClient, TickAttribBidAsk from ibapi.wrapper import EWrapper, TickTypeEnum from ibapi.contract import Contract
class TestApp(EWrapper, EClient):
def __init__(self):
EClient.__init__(self, self)
def tickPrice(self, reqId, tickType, price, attrib):
print("Tick price. Ticker Id:", reqId, "tickType:", TickTypeEnum.to_str(tickType), "Price:", price, end=' ')
def tickByTickBidAsk(self, reqId: int, time: int, bidPrice: float, askPrice: float, bidSize: int, askSize: int, tickAttribBidAsk: TickAttribBidAsk):
print(bidPrice)
tkinterApp.price1 = bidPrice
class Application:
def runTest(self):
app = TestApp()
app.connect("127.0.0.1", 7497, 0)
contract = Contract()
contract.symbol = "PROG"
contract.secType = "STK"
contract.currency = "USD"
contract.exchange = "SMART"
contract.primaryExchange = "NASDAQ"
time.sleep(1)
app.reqMarketDataType(1)
app.reqTickByTickData(19003, contract, "BidAsk", 0, True)
app.run()
def __init__(self):
t = threading.Thread(target=self.runTest)
t.start()
self.runTest()
class TkinterClass:
ibkrConnection = Application()
root = Tk()
root.title("test")
root.grid_columnconfigure((0, 1), weight=1)
titleTicker = Label(root, text="TICKER", bg='black', fg='white', width=100)
titleRating = Label(root, text="PRICE", bg='black', fg='white', width=100)
ticker1 = Label(root, text="PROG", bg='black', fg='white', width=100)
price1 = Label(root, text=0, bg='black', fg='white', width=100) # To be changed with every tick
titleTicker.grid(row=1, column=1)
titleRating.grid(row=1, column=2)
ticker1.grid(row=2, column=1)
price1.grid(row=2, column=2)
root.mainloop()
tkinterApp = TkinterClass()
def tickByTickBidAsk 是一个回调函数,每~2 秒调用一次
我想更新TkinterClass 类中的price1 变量,但是当我尝试执行我的代码时,tkinterApp.price1 = bidPrice 行给了我一个名称错误:TkinterClass is not defined
这可能是我知道的一个菜鸟错误:)
【问题讨论】:
-
我不确定我是否明白你在做什么。但是你没有初始化 price1。因此,在 TkinterClass 的 init 中设置 price1 ,您可以通过 tkinterApp.price1 访问它
-
tkinterApp = TkinterClass() 行永远不会执行。 TkinterClass 类中有一堆静态代码,但没有方法。 root.mainloop() 不返回。
-
你不能像这样在同一行组合
import命令。
标签: python python-3.x callback python-class tws