【发布时间】:2016-10-11 17:48:30
【问题描述】:
我正在尝试修改 Bryan Oakley 在 ButtonRelease-1 事件中提供的 highlights (tags) words in a tkinter Text widget 的一些惊人代码。
我想单击一些文本,而不是突出显示单个单词,将鼠标拖动到同一行的另一个区域(左或右),然后突出显示范围 wordstart 和 wordend 的整个范围边界。
例如,如果我点击下面代码中tk之后第一行的末尾,将鼠标拖到p em> 词 import 并释放我的鼠标按钮,我希望标签扩展以捕获从 1.0 到 1.20 的全部范围。
下面的代码使用两个tk.StringVar 来捕获开始和结束字符串,但是从获得的这两个索引中,我如何将这些开始和结束点应用到范围,然后扩展以突出显示wordstart 和@987654329 @ 范围?
import tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.text = tk.Text(self, wrap="none")
self.text.pack(fill="both", expand=True)
self.start = tk.StringVar()
self.end = tk.StringVar()
self.text.bind("<Button-1>", self.button_down)
self.text.bind("<ButtonRelease-1>", self.button_up)
#self.text.bind("<B1-Motion>", self._on_click)
self.text.tag_configure("highlight", background="green", foreground="black")
with open(__file__, "rU") as f:
data = f.read()
self.text.insert("1.0", data)
def button_down(self, event):
self.start.set(self.text.index('@%s,%s' % (event.x, event.y)))
print(self.start.get())
def button_up(self, event):
self.end.set(self.text.index('@%s,%s' % (event.x, event.y)))
print(self.end.get())
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
【问题讨论】:
标签: python tkinter text tags bind