使用 Qt Pyside2 和 asyncio wait 语法?

问题描述 投票:0回答:3

如何在pyside2的主循环中等待这个函数(src):

async def do_request(value): #asyncqt maybe possible
    #print("do request")
    await asyncio.sleep(value)
    #print("request finished")
    return value

async def eventFilter(self, source, event): #impossible, needs pyside2 rewrite
     ... 

我非常不愿意使用任何非官方的东西,所以 pyside2:我研究了 pyside2 具有 Qthreads 示例的示例,但没有 asyncio wait。我的lib使用asyncio,那么如何在pyside2中等待?

这是一个严重的问题:https://github.com/harvimt/quamash/issues/104不支持pyside2并且https://github.com/gmarull/asyncqt未维护。解决办法是什么?
请问如何集成这么简单的调用。我担心非维护的仓库会出现中断/错误

python python-3.x pyside2 python-asyncio
3个回答
1
投票

观看后 https://www.youtube.com/watch?v=ol5IuJyw-Tg 使用内置

qthread qrunnable qthread
不阻塞主 gui 线程是可行的方法。

有关示例,请参阅https://code.qt.io/cgit/pyside/pyside-setup.git/tree/examples/corelib并浏览源代码(适用于pyside2)


0
投票

有外部库(asyncqt、qasync)可以使

Qt
asyncio
很好地发挥作用,但这些库似乎支持很差。官方 PySide6 似乎对一个名为
QtAsyncio
的模块有适当的支持,这可能是最好的(示例在这里)。

但这在 PySide2 中影响了我,我发现最好简单地在单独的

asyncio
中运行我的
threading.Thread
事件循环,在主线程中使用 Qt
exec_
事件循环,并使用 Qt Slots 在它们之间进行通信/信号。这样我就可以使用 async/await 语法在后台获取内容并保持窗口顺利运行。

希望有帮助!


-1
投票

PyQt 非常受欢迎。尽管由于许可问题,有些人可能不想要它。无论您选择 PyQt 还是 PySide,QTimer 都有一些非常好的功能。特别是,您可以使用

singleShot()
方法以特定延迟运行代码。

from PySide2.QtCore import QTimer

def myfunc():
    # do your stuff here
    pass

def do_request(self, value):
    # call static function singleShot
    QTimer.singleShot( delay_msec, myfunc)

您还可以

start()
QTimer 定期运行任务
interval

© www.soinside.com 2019 - 2024. All rights reserved.