Есть ли эффективный способ узнать, выделен ли текст в виджете Tkinter Text?

На этой странице, описывающей текстовый виджет Tkinter, указано, что "Выделен специальный тег с именем SEL. (или «sel»), который соответствует текущему выбору. Вы можете использовать константы SEL_FIRST и SEL_LAST для ссылки на выбор. Если выбора нет, Tkinter вызывает исключение TclError».

Мой вопрос: есть ли более эффективный способ узнать, есть ли выбор в текстовом виджете, помимо обмана с исключениями, как в приведенном ниже коде?

seltext = None
try:
   seltext = txt.get(SEL_FIRST, SEL_LAST)
except TclError:
   pass

if seltext:
   # do something with text

person Brandon    schedule 09.12.2010    source источник


Ответы (2)


Вы можете запросить у виджета диапазон текста, который охватывает тег «sel». Если выбора нет, диапазон будет нулевой длины:

if txt.tag_ranges("sel"):
    print "there is a selection"
else:
    print "there is no selection"
person Bryan Oakley    schedule 09.12.2010
comment
Следует отметить, что tag_ranges вернет список диапазонов текста с именем тега. Так что это может быть полезно, если они вам нужны (как я делаю в этот конкретный момент, поэтому я прокомментировал). - person Brōtsyorfuzthrāx; 30.10.2014

Вот способ проверить, выбрано ли указанное местоположение.

if "sel" in myTextWidget.tag_names(INSERT): #use 'not in' to see if it's not selected
    print("INSERT to 'insert+1c' is selected text!");

Я не знаю, почему они не позволяют вам поставить второй индекс там. Я также не знаю, является ли это более эффективным для процессора, чем ваша версия, но, насколько я могу судить, она кажется более стандартной.

person Brōtsyorfuzthrāx    schedule 21.05.2014