내 NumLk이 켜져 있거나 꺼져있는 경우 컴퓨터에서 내 NumLk이 켜져 있는지 여부를 알려주지 않으므로 내 시스템 트레이에 아이콘에 따라 변경됩니다. 내 NumLk의 상태. 이 .py는 컴퓨터가 켜져있을 때 항상 실행됩니다.NumLk 상태를 반영하는 시스템 트레이에 아이콘을 표시하는 방법
지금까지 3 코드를 혼합 할 수 있었고 아이콘을 시스템 트레이에 표시 할 수 있었지만 NumLk 상태가 변경되면 업데이트되지 않습니다. 내가 두 번 NumLk 키를 누르면 사실, 난 여전히 같은 아이콘합니다 (on
하나)를 얻을이 오류가 얻을 :
QCoreApplication::exec: The event loop is already running
File "\systray_icon_NumLk_on_off.py", line 21, in on_key_press
main(on)
File "\systray_icon_NumLk_on_off.py", line 46, in main
sys.exit(app.exec_())
SystemExit: -1
내 코드가되지 않을 수도 있습니다 그것을 할 수있는 최선의 방법을, 그래서 어떤 대안을 환영합니다! 두 번 app.run()
을 시작하려고하고 있기 때문에
#####get the state of NumLk key
from win32api import GetKeyState
from win32con import VK_NUMLOCK
#how to use: print(GetKeyState(VK_NUMLOCK))
#source: http://stackoverflow.com/questions/21160100/python-3-x-getting-the-state-of-caps-lock-num-lock-scroll-lock-on-windows
#####Detect if NumLk is pressed
import pyglet
from pyglet.window import key
window = pyglet.window.Window()
#source: http://stackoverflow.com/questions/28324372/detecting-a-numlock-capslock-scrlock-keypress-keyup-in-python
on=r'on.png'
off=r'off.png'
@window.event
def on_key_press(symbol, modifiers):
if symbol == key.NUMLOCK:
if GetKeyState(VK_NUMLOCK):
#print(GetKeyState(VK_NUMLOCK))#should be 0 and 1 but
main(on)
else:
main(off)
@window.event
def on_draw():
window.clear()
### display icon in systray
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
#source: http://stackoverflow.com/questions/893984/pyqt-show-menu-in-a-system-tray-application - add answer PyQt5
class SystemTrayIcon(QtWidgets.QSystemTrayIcon):
def __init__(self, icon, parent=None):
QtWidgets.QSystemTrayIcon.__init__(self, icon, parent)
menu = QtWidgets.QMenu(parent)
exitAction = menu.addAction("Exit")
self.setContextMenu(menu)
def main(image):
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
trayIcon = SystemTrayIcon(QtGui.QIcon(image), w)
trayIcon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
pyglet.app.run()
라이브러리를 과도하게 사용하는 이유는 무엇입니까? Qt는 Pyglet처럼 키 누르기를 확인할 수 있습니다. 또한 win32api 수 있습니다 .. 그럼 왜 spagetti - 논리? – Torxed