Программа asyncio с qasync и PySide6 – когда я могу начать планировать задачи в цикле событий? ⇐ Python

Программы на Python
Anonymous
Программа asyncio с qasync и PySide6 – когда я могу начать планировать задачи в цикле событий?

Сообщение Anonymous »

Я запускаю свою программу, используя следующее:
async def main():
logger.info('client app starting')
app = QApplication(sys.argv)
main = MainWindow()
main.show()
loop = QEventLoop(app)
with loop:
loop.run_forever()

if __name__ == '__main__':
initLogging(fileName=os.path.join('log','client.log'))
asyncio.run(main())

В методе __init__ MainWindow я планировал некоторые задачи в цикле событий. Но они не запускались, пока я не закрыл главное окно. Затем я попытался запланировать их в событии showEvent в главном окне, но это тоже не сработало. Затем я активировал его с помощью кнопки, и он сработал, но это нежелательно, потому что я хочу, чтобы они запускались автоматически. Когда я могу начать добавлять задачи в цикл событий и какое событие я могу для этого использовать?
python 3.12
PySide 6.7.3
qasync 0.27.1

Вот рабочий пример. Обратите внимание, что hello печатается после закрытия главного окна.
import sys
import asyncio
from qasync import QApplication, QEventLoop
from PySide6.QtWidgets import QMainWindow, QLabel

async def hello():
print('hello')

class MainWindow(QMainWindow):
def __init__(self) -> None:
super().__init__()
self.setWindowTitle('Client App')

task = asyncio.create_task(hello())

self.label = QLabel('Main Window')
self.setCentralWidget(self.label)

def showEvent(self, event):
print('main window show event')
task = asyncio.create_task(hello())

def focusInEvent(self, event):
print('main window focus in event')

async def main():
print('app starting')
app = QApplication(sys.argv)
main = MainWindow()
main.show()
loop = QEventLoop(app)
with loop:
loop.run_forever()

if __name__ == '__main__':
asyncio.run(main())


Подробнее здесь: https://stackoverflow.com/questions/790 ... tasks-in-t

Вернуться в «Python»