Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 10, 2017 11:44:20

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

bind

Не работает бинд, хелп

 #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()

Офлайн

#2 Ноя. 10, 2017 14:12:31

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

bind

Fedy1661
Не работает бинд,
очень даже работает, если запустить скрипт, тыцькнуть мышкой по текст-виджету, и нажать контрол+N то все работает..
другое дело что если текcт-втджет не выбирать, или нажать контрол+n а уж тем более контрол+т, то конечно не работает, но это уже особенности ткинтера.



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

Офлайн

#3 Ноя. 10, 2017 15:14:24

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

bind

PEHDOM
А можно как-то сделать чтобы бинд реагировал на контрл+т?

Офлайн

#4 Ноя. 10, 2017 16:33:00

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

bind

Офлайн

#5 Ноя. 10, 2017 18:13:06

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

bind

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



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

Отредактировано PEHDOM (Ноя. 10, 2017 18:16:21)

Офлайн

#6 Ноя. 10, 2017 21:24:59

vic57
Зарегистрирован: 2015-07-07
Сообщения: 893
Репутация: +  126  -
Профиль   Отправить e-mail  

bind

хоткеи будут работать когда виджет получит фокус ввода. по коду ТС хоткей будет <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()

Отредактировано vic57 (Ноя. 10, 2017 21:27:31)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version