def __init__(self): super(Menu, self).__init__() self._app = MenuApp() self._app.minimize() self._current_request = None def respond(result): self._app.minimize() if self._current_request is not None: self._current_request.respond(result) self._current_request = None def cancel(): if self._current_request is not None: self._current_request.done() self._current_request = None self._app.selected.connect(respond) self._app.dismissed.connect(cancel) self._app.dismissed.connect(self._app.minimize)
class Menu(QObject): finished = pyqtSignal() def __init__(self): super(Menu, self).__init__() self._app = MenuApp() self._app.minimize() self._current_request = None def respond(result): self._app.minimize() if self._current_request is not None: self._current_request.respond(result) self._current_request = None def cancel(): if self._current_request is not None: self._current_request.done() self._current_request = None self._app.selected.connect(respond) self._app.dismissed.connect(cancel) self._app.dismissed.connect(self._app.minimize) def exec_(self): self._app.exec_() return self.finished.emit() def prompt(self, request, command): self._current_request = request self._app.restore() try: self._app.setup(command.items, **command.options) except: request.done() raise def kill(self, request, command): self.finished.emit() self._app.quit()