Найти - Пользователи
Полная версия: bind
Начало » Центр помощи » bind
1
Fedy1661
Не работает бинд, хелп
 #coding: utf-8
from tkinter import *
def lol(event):
    print("Кек")
root = Tk()
root.geometry("300x300")
text = Text(root, width=300, height=300)
text.pack()
text.bind("<Control-N>", lol)
root.mainloop()
PEHDOM
Fedy1661
Не работает бинд,
очень даже работает, если запустить скрипт, тыцькнуть мышкой по текст-виджету, и нажать контрол+N то все работает..
другое дело что если текcт-втджет не выбирать, или нажать контрол+n а уж тем более контрол+т, то конечно не работает, но это уже особенности ткинтера.
Fedy1661
PEHDOM
А можно как-то сделать чтобы бинд реагировал на контрл+т?
vic57
передать ему фокус
http://ilnurgi1.ru/docs/python/modules/tkinter/base.html
PEHDOM
Fedy1661
А можно как-то сделать чтобы бинд реагировал на контрл+т?
можно но тут нужно шаманство, дело в том что ткинтер понимает шоткаты именно в контесте раскладки, тоесть “<Control-N>”, “<Control-n>” , “<Control-ograve>”(ctrl+Т) и “<Control-ograve>”(ctrl+т) для него разные сочетания клавиш..
в принципе можно забиндить все 4 варианта или попробовать фильтровать через keyсode както так
  #coding: utf-8
from tkinter import *
def lol(event):
    if event.keycode == 78:
        print("Кек")
root = Tk()
root.geometry("300x300")
text = Text(root, width=300, height=300)
text.pack()
root.bind('<Control-Key>', lol)
root.mainloop()
тогда оно будет реагировать на сочетания Control-n в любой раскладке независимо от регистра..
vic57
передать ему фокус
Можно создавать привязку для разных“ уровней” приложения.
для виджета, для класса виджета, для окна верхнего уровня, или для всего приложения
тоесть если хотите чтобы Control-n перехватывалось в любом месте приложения используйте bind_all вместо bind
подробнее: http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm
vic57
хоткеи будут работать когда виджет получит фокус ввода. по коду ТС хоткей будет <Ctrl-Shift-n>
 from tkinter import *
def lol(event):
    print("Кек")
root = Tk()
root.geometry("300x300")
text = Text(root, width=300, height=300)
text.pack()
text.bind("<Control-N>", lol)
text.focus()
root.mainloop()
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