Найти - Пользователи
Полная версия: Tkinter, bind
Начало » Центр помощи » Tkinter, bind
1
Fedy1661
Возникла проблема с биндом.
Я хочу забиндить клавиши h,a,c,k, но прога выдаёт ошибку, help
 root.bind_all("<KeyPress-h-a-c-k>", hack)
Error
 root.bind_all("<KeyPress-h-a-c-k>", hack)
  File "C:\Users\Fedy\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1245, in bind
    return self._bind(('bind', self._w), sequence, func, add)
  File "C:\Users\Fedy\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1200, in _bind
    self.tk.call(what + (sequence, cmd))
_tkinter.TclError: extra characters after detail in binding
PEHDOM
оно так работает только в случаях типа ctrl-alt-чтото_еще. Иначе нужно городить колхоз типа такого:

 from tkinter import *
SHORTCUT= [65, 83, 68]  # сочетание хоткеев a-s-d
stack = [] # стек где храним коды нажатых в данный момент клавиш
def key_pressed(e):
    # добавляем в стек код клавиши при нажатии и проверям равен ли стек хоткею
    k_code  = e.keycode
    if k_code not in stack:
        stack.append(k_code)
    if SHORTCUT == stack:
        # проверяется нажаты ли одновременно a-s-d
        # порядок нажатия  учитывается, регистр и раскладка - нет.
        print('shortcut pressed')
def key_released(e):
    # Удаляем из стека код клавиши если клавишу отпустили
    k_code  = e.keycode
    if k_code in stack:
        stack.remove(k_code)
root = Tk()
root.bind("<KeyPress>", key_pressed)
root.bind ("<KeyRelease>", key_released)
root.mainloop()
Fedy1661
PEHDOM
root.bind(“<KeyPress>”, key_pressed)
root.bind (“<KeyRelease>”, key_released)
Спасибооооооо)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB