zoukankan      html  css  js  c++  java
  • tkinter学习-- 四、控件Text

    Tkinter 之Text文本框标签(转至:https://www.cnblogs.com/yang-2018/p/11787385.html)

     

    一、参数说明

    语法作用

    t=tk.Text()
    t.insert(END,'插入的文本信息')

    t.insert(1.0,'文本信息')在第一行第0列输入文本信息

    INSERT:光标的插入点
    CURRENT:鼠标的当前位置所对应的字符位置
    END:这个Textbuffer的最后一个字符

    t.delete(mark1, mark2) INSERT:光标的插入点 CURRENT:鼠标的当前位置所对应的字符位置
    END:这个Textbuffer的最后一个字符
    SEL_FIRST:选中文本域的第一个字符,如果没有选中区域则会引发异常
    SEL_LAST:选中文本域的最后一个字符,如果没有选中区域则会引发异常
    t.get(起始位置,结束位置)如t.get(1.2,1.6) 获取起始位置结束位置之间的文本内容

    tag_config参数:

    background  指定该 Tag 所描述的内容的背景颜色
    注意:bg 并不是该选项的缩写,在这里 bg 被解释为 bgstipple 选项的缩写
    bgstipple  指定一个位图作为背景,并使用 background 选项指定的颜色填充
    只有设置了 background 选项该选项才会生效
    默认的标准位图有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'
    borderwidth  指定文本框的宽度
    fgstipple  指定一个位图作为前景色
    默认的标准位图有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'
    font  指定该 Tag 所描述的内容使用的字体
    foreground  指定该 Tag 所描述的内容的前景色
    注意:fg 并不是该选项的缩写,在这里 fg 被解释为 fgstipple 选项的缩写
    justify  控制文本的对齐方式
    默认是 "left"(左对齐),还可以选择 "right"(右对齐)和 "center"(居中)
    lmargin1  设置 Tag 指向的文本块第一行的缩进
    lmargin2  设置 Tag 指向的文本块除了第一行其他行的缩进
    offset  设置 Tag 指向的文本相对于基线的偏移距离  可以控制文本相对于基线是升高(正数值)或者降低(负数值)
    默认值是 0
    overstrike  在 Tag 指定的文本范围画一条删除线
    underline  该选项设置为 True 的话,则 Tag 所描述的范围内文本将被画上下划线
    wrap  设置当一行文本的长度超过 width 选项设置的宽度时,是否自动换行
    该选项的值可以是:"none"(不自动换行),"char"(默认)(按字符自动换行)和 "word"(按单词自动换行)

    Text方法列表:

    bbox(index)
    -- 返回给定索引指定的字符的边界框
    -- 返回值是一个 4 元组:(x, y, width, height)
    -- 如果该字符是不可见的,那么返回 None
    -- 注意:只有当 Text 组件被更新的时候该方法才有效,可以使用 update_idletasks() 方法先更新 Text 组件

    compare(index1, op, index2)
    -- 返回对比 index1 和 index2 指定的两个字符的结果
    -- op 是操作符:'<', '<=', '==', '>=', '>' 或 '!='(不支持 Python 的 '<>' 操作符)
    -- 返回布尔类型的值表示对比的结果

    debug(boolean=None)
    -- 开启或关闭 Debug 状态

    delete(start, end=None)
    -- 删除给定范围的文本或嵌入对象
    -- 如果在给定范围内有任何 Marks 标记的位置,则将 Marks 移动到 start 参数开始的位置

    dlineinfo(index)
    -- 返回给定索引指定的字符所在行的边界框
    -- 返回值是一个 5 元组:(x, y, width, height, offset),offset 表示从该行的顶端到基线的偏移
    -- 如果该行不可见,则返回 None
    -- 注意:只有当 Text 组件被更新的时候该方法才有效,可以使用 update_idletasks() 方法先更新 Text 组件

    dump(index1, index2=None, command=None, **kw)
    -- 返回 index1 和 index2 之间的内容
    -- 返回的值是一个由 3 元组(关键词,值,索引)组成的列表,关键词参数的顺序为:all, image, mark, tag, text, window
    -- 默认关键词是 'all',表示全部关键词均为选中状态
    -- 如果需要筛选个别关键词,可以用 dump(index1, index2, image=True, text=True) 这样的形式调用
    -- 如果指定了 command 函数,那么会为列表中的每一个三元组作为参数调用一次该函数(这种情况下,dump() 不返回值)

    edit_modified(arg=None)
    -- 该方法用于查询和设置 modified 标志(该标标志用于追踪 Text 组件的内容是否发生变化)
    -- 如果不指定 arg 参数,那么返回 modified 标志是否被设置
    -- 你可以传递显式地使用 True 或 False 作为参数来设置或清除 modified 标志
    -- 任何代码或用户的插入或删除文本操作,“撤销”或“恢复”操作,都会是的 modified 标志被设置

    edit_redo(self)
    -- “恢复”上一次的“撤销”操作
    -- 如果 undo 选项为 False,该方法无效
    -- 详见上方用法【“撤销”和“恢复”操作】

    edit_reset()
    -- 清空存放操作记录的栈

    edit_separator()
    -- 插入一个“分隔符”到存放操作记录的栈中,用于表示已经完成一次完整的操作
    -- 如果 undo 选项为 False,该方法无效
    -- 详见上方用法【“撤销”和“恢复”操作】

    edit_undo()
    -- 撤销最近一次操作
    -- 如果 undo 选项为 False,该方法无效
    -- 详见上方用法【“撤销”和“恢复”操作】

    get(index1, index2=None)
    -- 返回 index1 到 index2(不包含)之间的文本
    -- 如果 index2 参数忽略,则返回一个字符
    -- 如果包含 image 和 window 的嵌入对象,均被忽略
    -- 如果包含有多行文本,那么自动插入换行符(' ')

    image_cget(index, option)
    -- 返回 index 参数指定的嵌入 image 对象的 option 选项的值
    -- 如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常

    image_configure(index, **options)
    -- 修改 index 参数指定的嵌入 image 对象的一个或多个 option 选项的值
    -- 如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常

    image_create(index, cnf={}, **kw)
    -- 在 index 参数指定的位置嵌入一个 image 对象
    -- 该 image 对象必须是 Tkinter 的 PhotoImage 或 BitmapImage 实例
    -- 可选选项 align:设定此图像的垂直对齐,可以是 "top"、"center"、"bottom" 或 "baseline"
    -- 可选选项 image:PhotoImage 或 BitmapImage 对象
    -- 可选选项 name:你可以为该图像实例命名,如果你忽略此选项,那么 Tkinter 会自动为其取一个独一无二的名字。
    -- 可选选项 padx:设置水平方向上的额外间距
    -- 可选选项 pady:设置垂直方向上的额外间距

    image_names()
    -- 返回 Text 组件中嵌入的所有 image 对象的名字

    index(index)
    -- 将 index 参数指定的位置以 "line.column" 的索引形式返回
    -- index 参数支持任何格式的索引

    insert(index, text, *tags)
    -- 在 index 参数指定的位置插入字符串
    -- 可选参数 tags 用于指定文本的样式
    -- 详见上方【Tags 用法】

    mark_gravity(self, markName, direction=None)
    -- 设置 Mark 的方向,可以是 "left" 或 "right"(默认是 "right",即如果在 Mark 处插入文本的话,Mark 将发生相应的移动以保持在插入文本的右侧)
    -- 如果设置为 "left",那么在 Mark 处插入文本并不会移动 Mark(因为 Mark 在插入文本的左侧)
    -- 如果忽略 direction 参数,则返回指定 Mark 的方向
    -- 详见上方【Marks 用法】

    mark_names()
    -- 返回 Text 组件中所有 Marks 的名字
    -- 包括两个特殊 Mark:"insert" 和 "current"
    -- 注意:"end" 是特殊的索引,不是 Mark

    mark_next(index)
    -- 返回在 index 指定的位置后边的一个 Mark 的名字
    -- 如果不存在则返回空字符串

    mark_previous(index)
    -- 返回在 index 指定的位置前边的一个 Mark 的名字
    -- 如果不存在则返回空字符串

    mark_set(markName, index)
    -- 移动 Mark 到 index 参数指定的位置
    -- 如果 markName 参数指定的 Mark 不存在,则创建一个新的 Mark

    mark_unset(*markNames)
    -- 删除 markNames 指定的 Marks
    -- 不能删除预定义的 "insert" 和 "current"

    replace(index1, index2, chars, *args)
    -- 将 index1 到 index2 之间的内容替换为 chars 参数指定的字符串
    -- 如果需要为替换的内容添加 Tag,可以在 args 参数指定 Tag
    -- 详见上方【Tags 用法】

    scan_dragto(x, y)
    -- 详见下方 scan_mark(x, y)

    scan_mark(x, y)
    -- 使用这种方式来实现 Text 组件内容的滚动
    -- 需要将鼠标按钮事件以及鼠标当前位置绑定到 scan_mark(x, y) 方法,然后将 <motion> 事件及当前鼠标位置绑定到 scan_dragto(x, y) 方法,就可以实现 Text 组件的内容在当前位置和 scan_mark(x, y) 指定的位置 (x, y) 之间滚动

    search(pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, nocase=None, count=None)
    -- 从 index 开始搜索 pattern,到 stopindex 结束(不指定表示搜索到末尾)
    -- 如果成功找到,以 "line.column" 返回第一个匹配的字符;否则返回空字符串
    -- forwards 参数设置为 True 表示向前(->)搜索
    -- backwards 参数设置为 True 表示向后(<-)搜索
    -- exact 参数设置为 True 表示搜索与 pattern 完全匹配的结果
    -- regexp 参数设置为 True,则 pattern 被解释为 Tcl 格式的正则表达式
    -- nocase 参数设置为 True 是忽略大小写,默认是区分大小写的搜索
    -- count 参数指定为一个 IntVar 的 Tkinter 变量,用于存放当找到匹配的字符个数(如果匹配结果中没有嵌入的 image 或 window 对象的话,一般该值等于 pattern 的字符个数)

    see(index)
    -- 滚动内容,确保 index 指定的位置可见

    tag_add(tagName, index1, index2=None)
    -- 为 index1 到 index2 之间的内容添加一个 Tag(tagName 参数指定)
    -- 如果 index2 参数忽略,则单独为 index1 指定的内容添加 Tag
    -- 详见上方【Tags 用法】

    tag_bind(tagName, sequence, func, add=None)
    -- 为 Tag 绑定事件
    -- 详见上方【Tags 用法】

    tag_cget(tagName, option)
    -- 返回 tagName 指定的 option 选项的值

    tag_config(tagName, cnf=None, **kw)
    -- 跟 tag_configure(tagName, cnf=None, **kw) 一样

    tag_configure(tagName, cnf=None, **kw)
    -- 设置 tagName 的选项
    -- 详见上方【Tags 用法】

    tag_delete(*tagNames)
    -- 删除 tagNames 指定的 Tags

    tag_lower(tagName, belowThis=None)
    -- 降低 Tag 的优先级
    -- 如果 belowThis 参数不为空,则表示 tagName 需要比 belowThis 指定的 Tag 优先级更低
    -- 详见上方【Tags 用法】

    tag_names(index=None)
    -- 如果不带参数,表示返回 Text 组件中所有 Tags 的名字
    -- index 参数表示返回该位置上所有的 Tags 的名字

    tag_nextrange(tagName, index1, index2=None)
    -- 在 index1 到 index2 的范围内第一个 tagName 的位置
    -- 如果没有则返回空字符串

    tag_prevrange(tagName, index1, index2=None)
    -- tag_nextrange() 的反向查找,也就是查找范围是 index2 到 index1

    tag_raise(tagName, aboveThis=None)
    -- 提高 Tag 的优先级
    -- 如果 aboveThis 参数不为空,则表示 tagName 需要比 aboveThis 指定的 Tag 优先级更高
    -- 详见上方【Tags 用法】

    tag_ranges(tagName)
    -- 返回所有 tagName 指定的文本,并将它们的范围以列表的形式返回

    tag_remove(tagName, index1, index2=None)
    -- 删除 index1 到 index2 之间所有的 tagName
    -- 如果忽略 index2 参数,那么只删除 index1 指定的那个字符的 tagName(如果有的话)

    tag_unbind(tagName, sequence, funcid=None)
    -- 解除与 tagName 绑定的事件(sequence 指定)

    window_cget(index, option)
    -- 返回 index 参数指定的嵌入 window 对象的 option 选项的值
    -- 如果给定的位置没有嵌入 window 对象,则抛出 TclError 异常

    window_config(index, cnf=None, **kw)
    -- 跟 window_configure(index, cnf=None, **kw) 一样

    window_configure(index, cnf=None, **kw)
    -- 修改 index 参数指定的嵌入 window 对象的一个或多个 option 选项的值
    -- 如果给定的位置没有嵌入 window 对象,则抛出 TclError 异常

    window_create(index, **options)
    -- 在 index 参数指定的位置嵌入一个 window 对象
    -- 支持两种方式在 Text 组件中嵌入 window 对象:请看下方 create 选项和 window 选项的描述
    -- 可选选项 align:设定此图像的垂直对齐,可以是 "top"、"center"、"bottom" 或 "baseline"
    -- 可选选项 create:指定一个回调函数用于创建嵌入的 window 组件,该函数没有参数,并且必须创建 Text 的子组件并返回
    -- 可选选项 padx:设置水平方向上的额外间距
    -- 可选选项 pady:设置垂直方向上的额外间距
    -- 可选选项 stretch:该选项控制当行的高度大于嵌入组件的高度时,嵌入组件是否延伸。默认值是 False,表示组件保持原形;设置为 True 表示将该组件垂直部分延伸至行的高度
    -- 可选选项 window:指定一个已经创建好的 window 组件,该组件必须是 Text 组件的子组件

    window_names()
    -- 返回 Text 组件中嵌入的所有 window 对象的名字

    xview(*args)
    -- 该方法用于在水平方向上滚动 Text 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar)
    -- 如果第一个参数是 "moveto",则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端
    -- 如果第一个参数是 "scroll",则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 "units" 或 "pages"),例如:xview("scroll", 3, "units") 表示向右滚动三行

    xview_moveto(fraction)
    -- 跟 xview("moveto", fraction) 一样

    xview_scroll(number, what)
    -- 跟 xview("scroll", number, what) 一样

    yview(*args)
    -- 该方法用于在垂直方向上滚动 Text 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar)
    -- 如果第一个参数是 "moveto",则第二个参数表示滚动到指定的位置:0.0 表示最顶端,1.0 表示最底端
    -- 如果第一个参数是 "scroll",则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 "units" 或 "pages"),例如:yview("scroll", 3, "pages") 表示向下滚动三页

    yview_moveto(fraction)
    -- 跟 yview("moveto", fraction) 一样

    yview_scroll(number, what)
    -- 跟 yview("scroll", number, what) 一样

    常用显示:

    windows= tk.Tk()
    #设置文本框的高度宽度 height,width
    Label(windows,text='heigt,width的用法').grid(row=0,column=0)
    Text(windows,height=2,width=10).grid(row=0,column=1)
    
    #设置文本框边框大小bd=''
    Label(windows,text='bd设置边框大小').grid(row=1,column=0)
    Text(windows,bd=10,height=2,width=10).grid(row=1,column=1)
    
    #设置背景色前景色
    Label(windows,text='设置背景色前景色').grid(row=2,column=0)
    Text(windows,bg='red',fg='yellow',height=2,width=10).grid(row=2,column=1)
    
    
    #设置字体font=('字体', 字号, 'bold(斜体)/italic/underline/overstrike')
    Label(windows,text='font设置字体,字号,斜体').grid(row=3,column=0)
    Text(windows,font=('楷体',10,'bold'),height=2,width=10).grid(row=3,column=1)
    
    # 文本框状态,禁用状态无法输入,正常状态可以输入
    Label(windows, text='文本框状态:').grid(row=4,column=0)
    text_config=Text(windows, height=1, width=20)
    text_config.insert('0.0', '禁用状态')
    text_config.config(state=DISABLED)
    text_config.grid(row=4,column=1)
    
    text_config2=Text(windows, height=1, width=20)
    text_config2.insert('0.0', '正常状态')
    text_config2.config(state=NORMAL)
    text_config2.grid(row=4,column=2)
    
    # 文本框点击是边框颜色,及颜色厚度。highlightcolor='颜色',highlightthickness=厚度
    Label(windows, text='点击颜色/厚度:').grid(row=5,column=0)
    Text(windows, height=1, width=10, highlightcolor='red', highlightthickness=1).grid(row=5,column=1)
    #
    
    #文本框样式
    # 文本框样式
    Label(windows, text='文本框样式:').grid(row=6)
    flat_text = Text(windows, height=1, width=10, relief=FLAT)
    flat_text.insert('0.0', '边框平坦')
    flat_text.grid(row=7,column=1)
    
    
    sunken_text = Text(windows, height=1, width=10, relief=SUNKEN)
    sunken_text.insert('0.0', '边框凹陷')
    sunken_text.grid(row=8,column=1)
    
    
    taised_text = Text(windows, height=1, width=10, relief=RAISED)
    taised_text.insert('0.0', '边框凸起')
    taised_text.grid(row=9,column=1)
    
    
    groove_text = Text(windows, height=1, width=10, relief=GROOVE)
    groove_text.insert('0.0', '边框压线')
    groove_text.grid(row=10,column=1)
    
    
    tidge_text = Text(windows, height=1, width=10, relief=RIDGE)
    tidge_text.insert('0.0', '边框脊线')
    tidge_text.grid(row=11,column=1)
    
    windows.mainloop()
    

     #获取文本框输入的值,展示在text页面中

    Text().insert(INSTAR,StringVar().get())

    Text().delete(开始位置=float,结束=float(最后=END))

    class Window_show(Tk):
        def __init__(self,windows):
            self.window=windows
            self.show_windows()
            self.change_value()
    
        def show_windows(self):
            self.value=StringVar()
            self.entry=Entry(self.window,width=20,textvariable=self.value)
            self.entry.grid(row=0,column=0)
            self.text=Text(self.window)
            self.text.grid(row=1,columnspan=2)
            self.button=Button(self.window,text='内容',width=20,command=self.change_value) #注意这里是self.change_value
            self.button.grid(row=0,column=1)
        def change_value(self):
            #使用self.value 的好处是可以避免首行是控制的情况;使用self.entry.get()容易出现首行空行
            #self.text.insert(INSERT,self.entry.get())
            print(self.value) #PY_VAR0
            self.text.insert(1.0,self.value.get()) #需要通过StringVar的get()方法才能调用entry传入的值
            self.text.insert(END,self.value.get())
    
    windows=tk.Tk()
    app= Window_show(windows)
    
    windows.mainloop()
    

      

    #内容装换换,读取text1数据,按钮后显示在text2上
    #如将横排文档装换为竖版显示,按entry输入的换行符进行装换
    class Translate(Tk):
        def __init__(self,windows):
    
            self.windows=windows
            self.show_view()
            self.change_content()
    
    
        def show_view(self): #这里的代码一定看清楚否则极易出现超过最大递归深度报错
            self.label=Label(self.windows,text='文字装换',font=('黑体',15),fg='red',bg='orange')
            self.label.grid(row=0,stick='w',columnspan=3,rowspan=2)
            self.label2=Label(self.windows,text='转换符(注意中英文)',anchor='e')
            self.label2.grid(row=2,column=0)
            self.entry=Entry(self.windows,width=10)
            self.entry.grid(row=2,column=1,padx=20)
            self.button=Button(self.windows,text='装换',width=10,command=self.change_content)
            self.button.grid(row=3,column=1)
            self.text1=Text()
            self.text1.grid(row=3,column=0)
            self.text2=Text()
            self.text2.grid(row=3,column=2)
    
        def change_content(self):
            content=self.text1.get(1.0,END)
            sep = self.entry.get() #','字符划分
            self.text2.delete(0.0,END)
            try:
                for i in  content.split(sep):
                    self.text2.insert(END, i+'
    ')
            except:
                print('error')
    
    
    windows=tk.Tk()
    windows.title('文字装置划分')
    
    app=Translate(windows)
    windows.mainloop()
    

     补充整理

    一些常用方法

    Text().index(index) –获取指定的索引。
    Text().insert(index,str) –在指定的索引处插入字符串。
    Text().see(index) –检查在给定索引处字符串是否可见。
    Text().get(startindex,endindex) –获取给定范围内的字符。
    Text().delete(startindex,endindex) –删除指定范围内的字符。

    text中的tag事件绑定若干按键 

    鼠标事件类型

    <Key>               随便一个按键,键值会以char的格式放入event对象。
    <Button-1>          按下了鼠标左键        <ButtonPress-1>
    <Button-2>          按下了鼠标中键        <ButtonPress-2>
    <Button-3>          按下了鼠标右键        <ButtonPress-3>
    <Enter>             鼠标进入组件区域
    <Leave>             鼠标离开组件区域
    <ButtonRelease-1>   释放了鼠标左键
    <ButtonRelease-2>   释放了鼠标中键
    <ButtonRelease-3>   释放了鼠标右键
    <B1-Motion>          按住鼠标左键移动
    <B2-Motion>          按住鼠标中键移动
    <B3-Motion>          按住鼠标右键移动 
    <Double-Button-1>   双击鼠标左键
    <Double-Button-2>   双击鼠标中键
    <Double-Button-3>   双击鼠标右键
    <Button-4>        滚动鼠标滚轮 向上滚动
    <Button-5>        滚动鼠标滚轮 向下滚动

    注意: 如果同时绑定单击事件 (<Button-1>) 和双击事件 (<Double-Button-1>), 则两个回调都会被调用.

    键盘事件类型

    <KeyPress>                       表示任何键盘按下
    <KeyRelease>                   表示松开键盘任意按键
    <KeyPress-A>                   表示按下键盘A键    A可以设置为其他的按键
    <KeyRelease-A>               表示松开键盘A键    A可以设置为其他的按键
    <Alt-KeyPress-A>             表示同时按下Alt和A键    A可以设置为其他的按键
    <Control-KeyPress-A>      表示同时按下Ctrl和A键    A可以设置为其他的按键
    <Shift-KeyPress-A>          表示同时按下Shift和A键    A可以设置为其他的按键
    <Double-KeyPress-A>      表示双击键盘A键    A可以设置为其他的按键
    <Lock-KeyPress-A>          表示开启大写之后键盘A键    A可以设置为其他的按键
    <Alt-Control-KeyPress-A> 表示同时按下alt+Ctrl和A键    A可以设置为其他的按键
    <Configure>                       这个关键了,如果widget的大小改变了,或者是位置,新的大小(width和height)会打包到event发往handler。

    from tkinter import  *
    import  webbrowser
    root=Tk()
    
    text=Text(root)
    text.pack()
    """
    一些常用方法:
    
    index(index) –获取指定的索引。
    insert(index,str) –在指定的索引处插入字符串。
    see(index) –检查在给定索引处字符串是否可见。
    get(startindex,endindex) –获取给定范围内的字符。
    delete(startindex,endindex) –删除指定范围内的字符。
    
    
    """
    
    #一、insert在开始,结尾处插入
    text.insert(INSERT,'在光标位置插入')
    text.insert(END,'在末尾处插入 ')
    text.insert(1.0,'1.0插队输入 ')
    text.insert(1.0,'66 ')
    cont="""
    这是 一大行的文字
    这里面有换行符
    换行符也会正常打印出来
    
    """
    text.insert(END,cont)
    
    
    #二、创建一个窗口组件,插入到text中,如:将button插入到text中 Text().window_create
    b1=Button(text='把button控件插入到text中')
    text.window_create(INSERT,window=b1)
    Button(text='exist',command=root.destroy).pack()
    
    
    
    #三、创建一个图片组件插入到text中,如:photo插入到text中
    photo=PhotoImage(file='giphy.gif')
    text.image_create(END,image=photo)
    
    
    
    
    
    #四、text标签 tag 打开文字中的url链接
    text.tag_add('tag1','1.5','1.8')
    #在text中的第一行第二个位置到第五个位置,加入tag1
    text.tag_config('tag1',background='yellow',foreground='red')
    #tag_config 设置tag1的格式
    
    def click(event):
        webbrowser.open('http://www.baidu.com')
    text.tag_bind('tag1','<Button-1>',click)
    
    #五、eventx,eventy事件函数获取点击位置
    text2=Text(root)
    text2.pack()
    def callback(event):
    print('当前位置为:',event.x,event.y)
    text2.bind('<Button-1>',callback)

    root.mainloop()
    root.mainloop()

     

    text中的索引使用

    索引类型意思
    line.column 行/列
    line.end 某一行的末尾
    INSERT(或'insert') 对应插入光标的位置
    CURRENT(或 "current" )  --用的少  对应于鼠标坐标最接近的位置不过,如果你紧按鼠标任何一个按钮,它会直到你松开它才响应(即你松开时的位置)
    END(或'end')  对应 Text 组件的文本缓冲区最后一个字符的下一个位置
    user-defined marks user-defined marks 是对 Text 组件中位置的命名。INSERT 和 CURRENT 是两个预先命名好的 marks,除此之外你可以自定义 marks 
    user-defined tags("tag.first", "tag.last")  你可以使用 "tag.first"(使用 tag 的文本的第一个字符之前)和 "tag.last"(使用 tag 的文本的最后一个字符之后)语法表示标签的范围。
    selection(SEL_FIRST, SEL_LAST)  selection 是一个名为 SEL(或 "sel" )的特殊 tag,表示当前被选中的范围,你可以使用 SEL_FIRST 到 SEL_LAST 来表示这个范围,如果没有选中的内容,那么 Tkinter 会抛出 TclError 异常
    window coordinate("@x,y")

     你还可以使用窗口坐标作为索引。例如在一个事件绑定中,你可以使用以下代码找到最接近鼠标位置的字符:如:

    def change(event):

      print('点击位置:'event.x,event.y)

         

    embedded object name(window, images)  

    embedded object name 用于指向在 Text 组件中嵌入的 window 和 image 对象。要引用一个 window,只要简单的将一个 Tkinter 组件实例作为索引即可。引用一个嵌入的 image,只需使用相应的 PhotoImage 和 BitmapImage 对象

    expressions  expressions 用于修改任何格式的索引,用字符号的形式实现修改索引的表达式。
    #text中的索引位置 text中如1.1表示第一行第一列
    #表示1.1这个字符 :
    #格式化字符串 "%d%d"%(line,column)
    #line.column格式索引
    text=Text(width=10)
    text.pack()
    text.insert(INSERT,'todayismonday')
    print(text.get('1.0', '1.2')) # t0
    #h获取文本从第一行第0个到第2个文字
    #line.end格式
    print(text.get('1.1','1.end'))  #odayismonday
    

      

      Text 支持多行文本,就是从一维空间变成了二维空间。因此可以用行和列定位一个位置 (https://blog.csdn.net/sinat_41104353/article/details/79307111?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160368274619724822537770%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=160368274619724822537770&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v28-7-79307111.first_rank_ecpm_v3_pc_rank_v2&utm_term=PYTHON+tkinter+texttag&spm=1018.2118.3001.4187)

     

      

     
  • 相关阅读:
    添加绝对路径的链接
    css-------------控制溢出隐藏 换行用省略号表示
    引入公共头部 脚部
    入口图片放在浏览器正中间,点击之后缩小固定在浏览器一侧
    伪类 统一添加样式
    nav 鼠标移入当前高亮显示,其他消失
    17/9/6 bootstrap.css去掉后引发的样式错乱
    JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
    javascript特效实现——当前时间和倒计时效果
    使用DataTables导出excel表格
  • 原文地址:https://www.cnblogs.com/yescarf/p/13860465.html
Copyright © 2011-2022 走看看