单击事件以突出显示文本

时间:2019-09-03 11:37:54

标签: tkinter highlight python-3.7

如何创建一个事件,允许用户通过单击并拖动来突出显示文本?

我是编程新手。到目前为止,我已经尝试通过仅单击一个单词来突出显示该单词来简化该单词,但是我认为我的tag_bind()函数存在问题。

import wx
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import tkinter as tk
from tkinter import *
root = Tk()

def text_click_callback(event):
    # an event to highlight a line when single click is done
    line_no = event.widget.index("@%s,%s linestart" % (event.x, 
event.y))
    #print(line_no)
    line_end = event.widget.index("%s lineend" % line_no)
    event.widget.tag_remove("highlight", 1.0, "end")
    event.widget.tag_add("highlight", line_no, line_end)
    event.widget.tag_configure("highlight", background="yellow")

File_object = open(r"Recall Tests.txt", "r")


m = PanedWindow(root)
m.pack(fill=BOTH, expand=1)


text1 = Text(m, height=90, width=90)
m.add(text1)
fileList = File_object.readlines()
text1.insert(INSERT, ''.join(fileList))
text1.config(state=DISABLED)

text1.tag_bind(text1, "highlight", text_click_callback)



text2 = Text(m, height=90, width=90, highlightcolor="black")
m.add(text2)
Label_1 = tk.Label(text2, text="NOTES",fg="red", font="Ariel 16 
underline").grid(row=4, column=0)
Label_2 = tk.Label(text2, text="PID:").grid(row=1)
e1 = tk.Entry(text2, width=90)
e1.grid(row=1, column=1)


root.mainloop()

这将在左侧打开一个文本文件,在右侧打开一个文本框。我希望用户能够通过左键单击并拖动鼠标来突出显示文本文件中显示的句子。我试图先使click函数起作用,但是当文件打开时,左键单击不起作用。

1 个答案:

答案 0 :(得分:0)

左键单击不起作用的原因是您已将其绑定到标签,并且在程序启动时,没有任何标签。

如果您希望单击在文本中的任何位置起作用,请使用bind而不是tag_bind

text1.bind("<B1>", text_click_callback)

如果要在用户拖动鼠标时突出显示,则需要绑定到<B1-Motion>

text1.bind("<B1>", text_click_callback)