只需要懂Python就可以了,不再需要学习 JavaScript HTML CSS
NiceGUI
NiceGUI httpx coroutine button click
import asyncio import httpx from nicegui import ui async def add(url): print('----') l = ui.label('This should be visible') async with httpx.AsyncClient() as client: r = await client.get(url) res = r.json() l.text = res['ip'] ip_url = 'https://api.seeip.org/jsonip' #ip_url = 'https://api.ipify.org/?format=json' ui.button('Add label', on_click= lambda:add(ip_url)) ui.run(reload=False, host="::", port=5678, favicon='🚀', title='httpx协程')
报错
RuntimeWarning: coroutine 'add' was never awaited self.on('click', lambda _: handle_event(on_click, ClickEventArguments(sender=self, client=self.client))) RuntimeWarning: Enable tracemalloc to get the object allocation traceback
修改成不带参数的
import asyncio import httpx from nicegui import ui #ip_url = 'https://api.seeip.org/jsonip' ip_url = 'https://api.bigdatacloud.net/data/client-ip' async def add(): print('----') l = ui.label('Waiting...') async with httpx.AsyncClient() as client: r = await client.get(ip_url) res = r.json() l.text = res['ipString'] ui.button('Get IP', on_click=add) ui.run(reload=False, host="::", port=5678, favicon='🚀', title='httpx协程')
真有传递参数,还是有办法的
How to pass an argument to an async function with a ui.button
import asyncio import httpx from nicegui import ui from functools import partial ip_url = 'https://api.seeip.org/jsonip' #ip_url = 'https://ipv6.jsonip.com/' # https://ipv4.jsonip.com/ # http://no-tls.jsonip.com/ async def add(url): print('----') l = ui.label('Waiting...') async with httpx.AsyncClient() as client: r = await client.get(url) res = r.json() l.text = res['ip'] ui.button('Get IP', on_click=partial(add, ip_url)) ui.run(reload=False, host="::", port=5678, favicon='🚀', title='httpx协程')
就是用 functools 的 partial