Передача асинхронной функции в tkinter.button - PullRequest
0 голосов
/ 30 мая 2019

Я делаю приложение для запроса некоторых данных из API и хотел интегрировать графический интерфейс.При необходимости могу предоставить код для wilib2

from tkinter import *
import asyncio
import aiohttp
import wilib2
entries = []
class WarframeEntry():
    def __init__(self, entry_name):
        self.name = entry_name

window = Tk()
window.title("Test App")
window.geometry('600x450')
lbl = Label(window, text="Enter Item Id:")
lbl.grid(column=0, row=0)
textBox = Entry(window, width=20)
textBox.grid(column=1, row=0)
async def updateDisplay():
    async with aiohttp.ClientSession() as session:
        htmls = await wilib2.fetch_all(session, entries)
        for item in htmls:
            text = Label(window, text=item['item_name'])
async def addNewEntry():
    entries.add(textBox.get())
    await updateDisplay()
btn = Button(window, text="Search", command=lambda: await asyncio.ensure_future(addNewEntry))
btn.grid(column=3, row=0)
window.mainloop()

1 Ответ

0 голосов
/ 30 мая 2019

Вы можете использовать asyncio.new_event_loop

 def handler():
     loop = asyncio.new_event_loop()
     ss = loop.run_until_complete( async_function )
     loop.close()

Подробнее см. вызов асинхронных функций в последовательном коде

...