PyQt5: 창이 표시되지 않아도 키가 반응합니다.

6153 단어 Python3단축키PyQt5
관련 전문 용어를 너무 많이 몰라서 구글을 할 수 없는 상태에 시달리다.

해본 일


World Hot Keystroke를 사용하여 비활성 창에 키보드 훅을 놓습니다.
한 마디로 하면'Ctrl+C 같은 키 입력'을 통해'최소화나 작업 트레이에 저장된 창'도'키 입력에 반응할 수 있다'는 느낌을 받을 수 있다.
실제로 Ctrl + Shift + Alt는 작업 트레이에 반복적으로 저장하거나 다시 표시하는 프로그램을 만들었습니다.

브라우저가 활성화된 상태에서 응용 프로그램을 숨기거나 다시 표시할 수 있습니다.
또한 작업 트레이 아이콘을 눌러도 같은 행동을 할 수 있다.
  • 애플리케이션이 맨 앞에 있지만 일부러
  • 트레이에 저장→다시 표시하면 애플리케이션이 맨 앞에 나타나지 않음
  • 트레이에서 호출한 후 즉시 활성화할 수 없음
    (위의gif라도 다시 보이는 프로그램은 활성화되지 않음)
  • 컨디션

  • Windows10
  • Python3.6 + PyQt5
  • 결정자: 키보드 (라이브러리 이름)
    boppreh/keyboard

    keyboard


    Take full control of your keyboard with this small Python library. Hook global events, register hotkeys, simulate key presses and much more.
    이것만 믿어.
    PyQt는 전 세계 키보드 연결을 지원하지 않기 때문에 외부 프로그램 라이브러리를 포기하거나 의존할 수 있습니다.
    ※ 가장 유력한 것은 PyGlobalShortcut지만, 윈도나 리눅스나 설치가 불가능해 채용이 연기되었습니다.

    소스 코드


    show_or_hide.py
    # -*- coding: utf-8 -*-
    import sys
    import keyboard
    from PyQt5.QtWidgets import QWidget, QApplication, QSystemTrayIcon
    from PyQt5.QtGui import QIcon
    from PyQt5.Qt import Qt
    
    
    class Window(QWidget):
        tray = QSystemTrayIcon()
    
        def __init__(self):
            super().__init__()
            iconPath = 'sample_icon.png'
    
            self.setWindowFlags(Qt.WindowStaysOnTopHint)  # 常に最前面に表示
            self.setWindowTitle('PyQt5 Window Show or Hide')  # ウィンドウタイトル
            self.setWindowIcon(QIcon(iconPath))  # ウィンドウアイコン
    
            self.tray.setIcon(QIcon(iconPath))  # トレイアイコン
            self.tray.activated.connect(self.ShowOrHide)  # トレイクリック時
            self.tray.show()
    
            # グローバルホットキー:Ctrl+Shift+Altを押した場合
            keyboard.add_hotkey('ctrl+shift+alt', lambda: self.ShowOrHide())
    
        def ShowOrHide(self):
            # ウィンドウの表示or非表示
            if self.isHidden():
                self.show()
            else:
                self.hide()
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        execute = Window()
        execute.show()
        sys.exit(app.exec_())
    

    좋은 웹페이지 즐겨찾기