tkinter - 用于智能合约事件处理程序的 Tkinter GUI
问题描述
我正在尝试为对 PancakeFactroy 智能合约的 pairCreated 事件做出反应的 scipt 制作 GUI。这是我的代码:
from tkinter import *
from web3 import Web3
import json
import asyncio
window = Tk()
window.geometry('500x250')
window.title('pair created')
factory = '0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73'
bsc = 'wss://speedy-nodes-nyc.moralis.io/********************************'
w3 = Web3(Web3.WebsocketProvider(bsc)
with open('D:/BOT/BOT/python/ABI/factoryABI.txt') as file:
factory_abi = json.load(file)
contractF = w3.eth.contract(address = factory, abi = factory_abi)
def handle_event(event):
pairData = (toDict(event))
now = datetime.datetime.now()
print('======== Pair created ========', now.strftime("%H:%M:%S %Y-%m-%d"))
print('Block number:',w3.eth.block_number)
print('token0:',pairData['args']['token0'])
print('token1:',pairData['args']['token1'])
async def log_loop(event_filter, poll_interval):
while True:
for PairCreated in event_filter.get_new_entries():
handle_event(PairCreated)
await asyncio.sleep(poll_interval)
def main():
event_filter = contractF.events.PairCreated.createFilter(fromBlock='latest')
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(
asyncio.gather(
log_loop(event_filter, 1)))
finally:
loop.close()
buttonStart = Button(window, text = 'Start',command = main())
buttonStart.pack()
window.mainloop()
问题是脚本在没有 tkinter 的情况下也可以工作,但是当我尝试使用将启动脚本的按钮创建一个窗口时,脚本就像没有 tkinter 一样运行(在终端中打印对而不是创建窗口)。
解决方案
推荐阅读
- c# - 属性名称为字符串时的对象字段值
- identityserver4 - 使用实体框架更新现有数据库
- php - PHP for循环不附加所有字符串
- python-3.x - 错误:在循环中使用 df.at 函数时,“BlockManager”对象没有属性“T”问题
- python - 冒泡排序没有打印正确的东西
- javascript - 使用 node.js 将重复的 HTML 片段导入其他 html 文件
- unit-testing - 如何使用 jest 在 nuxt.js 中测试 head()
- flutter - Dart:类继承成员重复
- c# - 需要一种更有效的方式进行 id 比较
- java - 如何解决对全局设置/事件注册表的类型安全异议?