前很久,我用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)