Я делаю скрипт Speed Typing Test, используя tkinter, как этот веб-сайт а>. Но я застрял в выборе текста, когда фокус находится в другом виджете.
Можно ли вообще сделать выбор видимым в виджете Текст, когда фокус находится в виджете Ввод?
Я делаю скрипт Speed Typing Test, используя tkinter, как этот веб-сайт а>. Но я застрял в выборе текста, когда фокус находится в другом виджете.
Можно ли вообще сделать выбор видимым в виджете Текст, когда фокус находится в виджете Ввод?
Вы можете установить для параметра exportselection
текстового виджета значение False
. Это предотвратит автоматическое связывание выделенного текста с буфером обмена. Это та автоматическая ассоциация, которая приводит к удалению выделения при изменении фокуса.
exportselection
на False
не имеет значения, потому что всякий раз, когда я переключаю фокус на другой виджет, выбор исчезает. Я думаю, что всякий раз, когда фокус изменяется, виджет Text автоматически ведет себя так, что выделение исчезает. Итак, я использовал теги, которые решили мою проблему. Я что-то упустил?
- person Ghanteyyy; 11.03.2021
exportselection
ведет себя неправильно?
- person Ghanteyyy; 11.03.2021
Я сам понял, что добавление тегов решает проблему.
text_widget.tag_add('highlight', '1.0', '1.24')
text_widget.tag_config('highlight', background='#0078d7')
Установите для exportselection
значение False
, а для атрибута inactiveselect
— тот же цвет, что и для атрибута selectbackground
. Пример:
import tkinter as tk
root = tk.Tk()
text = tk.Text(root, exportselection = False)
text.config(inactiveselect = text.cget("selectbackground"))
text.pack(fill = "both", expand = True)
root.mainloop()
Пример использования наследования классов:
import tkinter as tk
class myText(tk.Text):
def __init__(self, master, **kw):
tk.Text.__init__(self, master = master, **kw)
if 'exportselection' not in kw.keys():
self['exportselection'] = False
if 'inactiveselect' not in kw.keys():
self['inactiveselect'] = self['selectbackground']
root = tk.Tk()
text = myText(root)
text.pack(fill = "both", expand = True)
root.mainloop()
Таким образом, виджет «Текст» автоматически установит exportselection
в false
, а inactiveselect
в selectbackground
, если вы не зададите какое-либо значение для этого.