class MyWidget(DisplayWidget): def __init__(self, parent=None): super(MyWidget, self).__init__(parent) self._executor = ProcessPoolExecutor(max_workers=4) def _button_clicked(self): future = self._executor.submit(download_data) future.add_done_callback(self._populate_textarea) def _populate_textarea(self, future): self._textarea.setPlainText(future.result())