#python #python-2.7 #user-interface #tkinter #binding
#python #python-2.7 #пользовательский интерфейс #tkinter #привязка
Вопрос:
Итак, у меня есть некоторые теги (строки, созданные пользователем), они постоянно отображаются в текстовом виджете. В принципе, если есть теги для отображения, вам нужно иметь возможность тройного щелчка по ним, и это приведет к появлению меню редактирования. Но если нет никаких тегов для отображения, я не хочу, чтобы люди могли трижды щелкнуть по нему.
Итак, моя мысль заключалась в том, чтобы привязать тройной щелчок к соответствующей функции, если есть теги для отображения, и отменить привязку, если нет никаких тегов для отображения.
for tag in sorted(tags_pre_listed):#This loop will just check the tags and OK them for use.
if tag[0:4]=='TAG-' and tag not in used_tags: # Just avoids duplicates.
tags_display_box.insert(Tk.END, '#' tag[4:] ' ') #inserts the tag to the display.
used_tags.append(tag)
if len(used_tags)>0: #If any tags were used to display, it will bind Triple click.
tags_display_box.bind("<Triple-1>", delete_tag)
else: #This is where it tries to unbind if there are no tags, but fails.
tags_display_box.unbind('<Button-1>',"<Triple-1>")
Проблема, которую я получаю, заключается в
TclError: can't delete Tcl command
Извините, это может быть ответ новичка, насколько я знаю, но я провел свое исследование и вообще не могу найти способ обойти это T-T
Большое спасибо за чтение и за любые советы!
Комментарии:
1. Я думаю,
<Button-1>
это правильный формат события для левой кнопки. Попробуйте заменить<Button 1>
на<Button-1>
2. @a874 хорошее место, я исправил это и обновлю код в своем посте, но, к сожалению, я все еще сталкиваюсь с той же ошибкой … T-T
Ответ №1:
Строка:
tags_display_box.unbind('<Button 1>',"<Triple-1>")
следует прочитать:
tags_display_box.unbind('<Triple-1>')
Как бы то ни было, вы пытаетесь отменить привязку чего-то, что не связано, из команды, которая не существует.
Комментарии:
1. ТЫ ПРЕКРАСНЫЙ ЧЕЛОВЕК! XD Спасибо, это сработало! Если бы вы были готовы, не могли бы вы подробнее рассказать об этом в комментарии? Я не совсем понимаю, почему это сработало, я просто знаю, что это сработало, lol. Еще раз спасибо!
2. На самом деле я не очень разбираюсь в tcl / tk, но, насколько я понимаю, tkinter — это тонкая оболочка вокруг tcl / tk. В необработанном tcl / tk вы определяете функции в tcl, затем используете «bind» для привязки к ним клавиш или кнопок мыши. Затем вы можете либо отменить привязку ключа, оставив функцию определенной; или вы можете отменить привязку ключа и «отменить определение» функции tcl. С помощью дополнительного аргумента интерпретатор пытается найти функцию с именем
<Triple-1>
и удалить ее.