前很久,我用utf8的编码格式,把开源字典的一万多汉字,按照拼音重新排列,每个拼音都占有一些编码位置,每个汉字都处在某个拼音的辖域内。就像拼音输入法一样。象数组查找元素一样,先找到某拼音的首地址,然后按照字的偏移量,相加就是字的编码。
这里得到字的编码,是一个数字,把它弄成utf8格式。unicode也是数字,它们可以弄成utf8格式,那么我们自己的数字,也可以弄成utf8格式。有一种作法就是,数字→bin→从右边始,按六位截取→再补加上照应的"10"→
然后再按字节转换回来。
为了给汉语词语加上边界,数字→bin后,可以再左移2bit,这样就有了边界编码的空间。
一个汉字可以处在词语的左边界,中间,右边界,和独立(具有双边界)。分别用2,0,1,3表示。后面步骤和前面一样。
这样我们就有了带边界的汉字编码,然后解码,放到tkinter的text上,按编码冠以4不同的tag。
比如人为的短语(冬天来了),分别对应tg2,tg0,tg0,tg1,那么鼠标点击到上面,四个字背景应该统一变色。这就是(点击选择)。
代码如下,比如edw是一个编辑窗口。(如果你觉得有用,那么请点下赞)
##-----------------设置[边界] 和 [选择] tags left_tag="2" right_tag="1" middle_tag="0" iso_tag="3" edw.tag_config(left_tag, ) edw.tag_config(middle_tag, foreground = 'black') edw.tag_config(right_tag, background = 'lightblue') #右 edw.tag_config(iso_tag, foreground = 'green') #右 edw.tag_config('SELCN',background = '#FCE28C') # 汉语选择-选择底色 #-----------------------------------------------------------------单击 选择 汉语词组 def ms_c(v): pos="@%d,%d" % (v.x,v.y) b=edw.index(pos) a1=edw.tag_prevrange(left_tag,b+"+1c") if a1!=() : c=edw.tag_nextrange(right_tag,a1[1]) if c!=() and edw.compare(c[1],">",b): return a1[0],c[1] else: return () else: return() def cn_selection_range(v): r=ms_c(v) if r!=(): start,end=r edw.tag_remove('SELCN', 1.0, start) edw.tag_add('SELCN', start, end) edw.tag_remove('SELCN', end, END) edw.bind("<1>",cn_selection_range)