Мне нужно приложение панели задач, чтобы реагировать не только на щелчки мышью, что не является проблемой, но и на определенную комбинацию клавиш (горячая клавиша).
Я очень плохо знаком с Python, поэтому япопробовал пример, основанный на wx.adv, и попытался включить туда слушателя из pynput.Код не работает, и я получаю ошибку, что on_press не определен.
KeyComb_My = [
{pynput.keyboard.Key.ctrl, pynput.keyboard.KeyCode(char='s')},
{pynput.keyboard.Key.ctrl_l, pynput.keyboard.KeyCode(char='s')},
{pynput.keyboard.Key.ctrl_r, pynput.keyboard.KeyCode(char='s')}
]
class TaskBarIcon(wx.adv.TaskBarIcon):
def __init__(self, frame):
self.frame = frame
super(TaskBarIcon, self).__init__()
self.set_icon(TRAY_ICON)
self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, self.on_left_down)
self.keyb_listener()
def CreatePopupMenu(self):
menu = wx.Menu()
create_menu_item(menu, 'Site', self.on_click)
menu.AppendSeparator()
create_menu_item(menu, 'Exit', self.on_exit)
return menu
def set_icon(self, path):
icon = wx.Icon(path)
self.SetIcon(icon, TRAY_TOOLTIP)
def on_left_down(self, event):
print ('Tray icon was left-clicked.')
def on_click(self, event):
frame = MyForm()
frame.Show()
def on_exit(self, event):
wx.CallAfter(self.Destroy)
self.frame.Close()
def on_press(self, key):
print(key)
if any([key in comb for comb in KeyComb_My]):
current.add(key)
if any(all(k in current for k in comb) for comb in
KeyComb_My):
print("Start")
frame = MyForm()
frame.Show()
def on_release(self, key):
try:
current.remove(key)
except KeyError:
pass
def keyb_listener(self):
current = set()
listener = pynput.keyboard.Listener(on_press=on_press,
on_release=on_release)
listener.start()
Я ожидал, что определенная комбинация клавиш запустит on_press и откроет другое окно (MyForm).Однако фактический вывод является ошибкой.