在Tkinter Text小部件中突出显示整个行长

时间:2018-06-24 06:04:00

标签: python tkinter

除了我希望突出显示的区域跨越“文本”小部件的宽度之外,此示例工作正常。我的第一个想法是使用ljust用空格填充字符串,但是由于Text小部件将使用不同的字体类型填充,因此无法正常工作。

是否可以突出显示整行?

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 :(得分:1)

您的突出显示需要包括换行符,以覆盖小部件的整个宽度。在第二个索引中添加“ + 1c”(加上一个字符):

text.tag_add("highlight", "{}.0".format(n), "{}.end+1c".format(n))

答案 1 :(得分:0)

使用+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)

它似乎工作正常。