我正在尝试修改一些由ButtonRelease-1
wordstart
事件的highlights (tags) words in a tkinter Text widget的Bryan Oakley提供的惊人代码。
我不想突出显示单个单词,而是要点击某些文字,将鼠标拖到同一行(左侧或右侧)的另一个区域,然后突出显示该范围内的全部范围wordend
和1.0
边界。
例如,如果我点击下面代码中 tk 后第一行的结尾,请将鼠标拖到 p import 这个词的em> 并释放我的鼠标按钮,我想要扩展标记以捕获从1.20
到{{的全部范围1}}。
下面的代码使用两个tk.StringVar
来捕获开始和结束字符串,但是从获得的那两个索引中,我将如何将这些起点和终点应用于该范围,然后展开以突出显示{{1} }和wordstart
范围?
wordend
答案 0 :(得分:4)
您可以将var materials= JSON.parse(localStorage.getItem('materials'));
var text=" ";
materials.length;
function workorders(){
for (i = 0; i < materials.length; i++) {
text += "<li>"+materials[i]+"</li>";
}
$('#wo_materials').val("<li>"+text+"</li>");
}
workorders();
或"wordstart"
附加到任何有效索引。此外,您不需要使用"wordend"
- 它会增加复杂性,并且不会为正常变量提供额外的价值:
以下是一种方法:
StringVar
答案 1 :(得分:0)
发布&#34;我的&#34;解决方案(基于布莱恩的代码和帮助的99%)。如果用户从左到右与从右到左突出显示鼠标,我不确定&#34;最佳&#34;处理它的方法,所以我将索引比较为浮点数,以查看哪个大于或小于并相应地处理了wordstart
和wordend
。
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.text.bind("<Button-1>", self.button_down)
self.text.bind("<ButtonRelease-1>", self.button_up)
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.xy_down = self.text.index('@%s,%s' % (event.x, event.y))
self.start = self.text.index('@%s,%s' % (event.x, event.y))
def button_up(self, event):
self.stop = self.text.index('@%s,%s' % (event.x, event.y))
self.xy_up = self.text.index('@%s,%s' % (event.x, event.y))
if self.xy_down == self.xy_up:
self.text.tag_remove('highlight', 1.0, 'end')
self.text.tag_add("highlight", 'insert wordstart', 'insert wordend')
elif float(self.start) > float(self.stop):
#print('Highlight right to left')
self.begin = self.text.index('%s wordend' % (self.start))
self.end = self.text.index('%s wordstart' % (self.stop))
self.text.tag_remove('highlight', 1.0, 'end')
self.text.tag_add("highlight", self.end, self.begin)
print(self.start, self.stop, self.begin, self.end)
elif float(self.start) < float(self.stop):
#print('Highlight left to right')
self.begin = self.text.index('%s wordstart' % (self.start))
self.end = self.text.index('%s wordend' % (self.stop))
self.text.tag_remove('highlight', 1.0, 'end')
self.text.tag_add("highlight", self.begin, self.end)
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()