首页 > 解决方案 > 用于智能合约事件处理程序的 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 一样运行(在终端中打印对而不是创建窗口)。

标签: tkinterpython-asyncioweb3py

解决方案


推荐阅读