Выделите всю длину строки в виджете Tkinter Text - PullRequest
0 голосов
/ 24 июня 2018

Этот пример работает нормально, за исключением того, что я хочу, чтобы выделенная область охватывала ширину виджета «Текст». Моей первой мыслью было заполнить строку пробелами, используя ljust, но так как виджет Текст будет заполняться разными типами шрифтов, он не будет работать.

Есть ли способ выделения всей строки?

import tkinter as tk

def highlight(n):
    text.tag_add("highlight", "{}.0".format(n), "{}.end".format(n))

def remove_highlight(n):
    text.tag_remove("highlight", "{}.0".format(n), "{}.end".format(n))

root = tk.Tk()

text = tk.Text(root, width=30, height=3, wrap=None)
text.pack()

text1 = "text"
text2 = "text2"

text.insert(tk.INSERT, "{}\n".format(text1))
text.insert(tk.INSERT, text2)

text.tag_configure("highlight", background="grey")
text.tag_configure("normal", font=("Arial", 12))
text.tag_configure("large", font=("Arial", 18))

text.tag_add("normal", "1.0", "1.end")
text.tag_add("large", "2.0", "2.end")

text.tag_bind("normal", "<Enter>", lambda event, n = 1: highlight(n))
text.tag_bind("normal", "<Leave>", lambda event, n=1: remove_highlight(n))
text.tag_bind("large", "<Enter>", lambda event, n = 2: highlight(n))
text.tag_bind("large", "<Leave>", lambda event, n=2: remove_highlight(n))

text.configure(state="disabled")

root.mainloop()

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Ваше выделение должно включать символ новой строки, чтобы охватить всю ширину виджета. Добавьте «+ 1c» (плюс один символ) ко второму индексу:

text.tag_add("highlight", "{}.0".format(n), "{}.end+1c".format(n))
0 голосов
/ 24 июня 2018

с использованием +1lines, кажется, работает. Я изменил две функции на

def highlight(n):
    text.tag_add("highlight", "{}.0".format(n), "{}.0+1lines".format(n))

def remove_highlight(n):
    text.tag_remove("highlight", "{}.0".format(n), tk.END)

и вроде нормально работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...