Python Tkinter не может отменить тройной щелчок

#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> и удалить ее.