def qt_input(app, title, placeholder=None, tool_window=False): code = None code_le = QLineEdit() def return_pressed_handler(): nonlocal code code = code_le.text() code_le.close() code_le.setWindowTitle(title) if placeholder is not None: code_le.setPlaceholderText(placeholder) if tool_window: code_le.setWindowFlags(code_le.windowFlags() | Qt.Tool | Qt.WindowStaysOnTopHint) code_le.returnPressed.connect(return_pressed_handler) code_le.show() code_le.setAttribute(Qt.WA_QuitOnClose) code_le.setFocusPolicy(Qt.StrongFocus) code_le.setFocus() code_le.raise_() code_le.activateWindow() app.exec_() return code
class App(QWidget): def __init__(self): super().__init__() self.input = QLineEdit(self) self.hk = Hook() self.init_ui() def init_ui(self): self.setWindowFlags(Qt.FramelessWindowHint) self.setWindowFlags(Qt.SplashScreen | Qt.WindowStaysOnTopHint) self.resize(500, 110) self.center() self.setAutoFillBackground(True) widget_colour = self.palette() color = QColor('#1D1F21') widget_colour.setColor(self.backgroundRole(), color) self.setPalette(widget_colour) # input self.input.resize(450, 70) self.input.move(self.rect().center() - self.input.rect().center()) self.input.returnPressed.connect(self.search) self.input.setStyleSheet( "border: 0px; background: #282a2e; color: #969896; font-size : 30px" ) self.hk.handler = self.on_keyboard_event self.hk.hook() def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: self.input.setText("") self.destroy_gui() def center(self): qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) def on_keyboard_event(self, args): if isinstance(args, KeyboardEvent): if args.current_key == 'Space' and args.event_type == 'key down' and 'Lcontrol' in args.pressed_key: self.display_gui() def search(self): if self.input.text() == "close": sys.exit() path = UserPath(self.input.text()).match() if path != "": self.destroy_gui() subprocess.Popen(path) self.input.setText("") def destroy_gui(self): self.hide() def display_gui(self): self.show() self.input.activateWindow()