对汉语有边界编码的词语编码的点击选择,tkinter,python

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

对汉语有边界编码的词语编码的点击选择,tkinter,python

上一篇:【Python - tkinter】给Tk实例添加一个去掉最大最小化的临时窗口 | 仅使用临时窗口让父窗口失效


下一篇:《tkinter实用教程七》tkinter ttk.Entry控件