如何在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未维护。解决办法是什么?
请问如何集成这么简单的调用。我担心非维护的仓库会出现中断/错误
观看后 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)
有外部库(asyncqt、qasync)可以使
Qt
和 asyncio
很好地发挥作用,但这些库似乎支持很差。官方 PySide6 似乎对一个名为 QtAsyncio
的模块有适当的支持,这可能是最好的(示例在这里)。
但这在 PySide2 中影响了我,我发现最好简单地在单独的
asyncio
中运行我的 threading.Thread
事件循环,在主线程中使用 Qt exec_
事件循环,并使用 Qt Slots 在它们之间进行通信/信号。这样我就可以使用 async/await 语法在后台获取内容并保持窗口顺利运行。
希望有帮助!
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
。