qt-async-threads#
qt-async-threads
allows Qt applications to run computational or IO intensive operations in threads using
convenient async/await
syntax.
class Window(QWidget):
def __init__(self, runner: AbstractAsyncRunner) -> None:
super().__init__()
self.setWindowTitle("Cat Finder")
self.runner = runner
self.results_label = QLabel("Idle")
self.results_label.setTextFormat(Qt.MarkdownText)
self.results_label.setOpenExternalLinks(True)
self.search_button = QPushButton("Search")
layout = QVBoxLayout(self)
layout.addWidget(self.results_label)
layout.addWidget(self.search_button)
self.search_button.clicked.connect(self.runner.to_sync(self._on_search_button_clicked))
async def _on_search_button_clicked(self, *args: object) -> None:
response = await self.runner.run(requests.get, "https://api.thecatapi.com/v1/images/search")
url = response.json()[0]["url"]
self.results_label.setText(f"Found a cat! [click to open]({url})")