python - 使用 OSC 更新 GANSpace 中的滑块
问题描述
我正在尝试使用来自python-osc 的消息更新来自GANSpace的 interactive.py 中的滑块。理想情况下,on_draw 函数应该在收到一系列 OSC 消息后运行。但是我在实现它时遇到了麻烦,因为 serve.forever() 函数被阻塞了,我不知道如何实现异步版本。
当我这样做时:
def set_slider_osc(addr, args):
print("[{0}] ~ {1}".format(args, addr))
#print(re.split('/',addr)[2])
if "/0" in addr:
ui_state.sliders[0].set(args)
if "/1" in addr:
ui_state.sliders[1].set(args)
async def loop():
while not pending_close:
root.update()
app.update()
on_draw()
reposition_toolbar()
await asyncio.sleep(0)
async def init_main():
setup_model()
setup_ui()
resample_latent()
pending_close = False
dispatcher = dispatcher.Dispatcher()
dispatcher.map("/Chroma/*", set_slider_osc)
server = AsyncIOOSCUDPServer(("127.0.0.1", 8000), dispatcher, asyncio.get_event_loop())
transport, protocol = await server.create_serve_endpoint() # Create datagram endpoint and start serving
await loop() # Enter main loop of program
transport.close() # Clean up serve endpoint
root.destroy()
#
if __name__=='__main__':
await init_main()
我收到错误,我尝试在函数外运行“等待”,而我尝试的另一种方式似乎已经有一个主循环在运行,因此无法运行新的..
我知道要求人们安装 GANSpace,但希望有人能阐明如何做到这一点。
解决方案
await
不能在用 定义的函数之外使用async def
。您正试图在函数之外使用它。解决方法是init_main
在事件循环中运行。
import asyncio
asyncio.run(init_main())
推荐阅读
- .net-core - 具有复杂结构的镶木地板转换
- python - 如何在python中更改网页的HTML代码| 硒
- java - 我想在我的安卓手机启动时启动我的应用程序
- xamarin - Xamarin 社区工具包 TabView 高度
- junit - org.mockito.exceptions.misusing.InvalidUseOfMatchersException:编写单元测试时
- nginx - 如何从 nginx 位置代理传递路径中删除文件扩展名?
- java - 使用 2 的补码的二进制算术(减法)的结果如何得到否定答案?
- azure-devops - 每个目标服务器的特殊构建代理与构建代理
- c# - WPF:创建从 TextBox 派生的“DoubleBox”
- c# - MD5 的简单哈希替换