除了我希望突出显示的区域跨越“文本”小部件的宽度之外,此示例工作正常。我的第一个想法是使用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()
答案 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)
它似乎工作正常。