Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 25, 2017 15:14:05

Fedy1661
Зарегистрирован: 2017-10-29
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter, bind

Возникла проблема с биндом.
Я хочу забиндить клавиши 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

Отредактировано Fedy1661 (Ноя. 25, 2017 15:15:54)

Офлайн

#2 Ноя. 25, 2017 16:41:59

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Tkinter, bind

оно так работает только в случаях типа 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()



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Ноя. 25, 2017 16:42:59)

Офлайн

#3 Ноя. 25, 2017 16:48:46

Fedy1661
Зарегистрирован: 2017-10-29
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Tkinter, bind

PEHDOM
root.bind(“<KeyPress>”, key_pressed)
root.bind (“<KeyRelease>”, key_released)
Спасибооооооо)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version