欢迎光临
我们一起进阶

Python的GUI编程(十五)Text(文本)

扫码或搜索:沉默王二
发送 290992
即可立即永久解锁本站全部文章

简介

Text 控件用来显示多行文本. Tkinter 的 Text 控件很强大, 很灵活, 可以实现很多功能. 虽然这个控件的主要用途是显示多行文本, 但其还可以被用作简单的文本编辑器, 甚至是网页浏览器. 

Text 控件可以显示网页链接, 图片, HTML页面, 甚至 CSS 样式表. 

from Tkinter import *
root=Tk()

text=Text(root,width=100,height=3,fg='red')
# insert的第一个参数为索引;第二个为添加的内容
text.insert(1.0,'fgjsdfkjgierjgidfkgjol ')
# 
text.insert(1.0,'uilqwwwwwre ')
# 
text.insert('2.end','\n')
text.insert(2.0,'weqrfrfrfrfrfrfrfrf ')
text.insert(2.0,'qwrewrrrrrw ')
# text.insert(3,'fgjsdfkjgierjgidfkgjol')
text.pack()
root.mainloop()

mark是用来表示在Text中位置的一类符号
mark: INSERT/CURRENT/END/SEL_FIRST/SEL_LAST控制添加位置

from Tkinter import *
root = Tk()
t = Text(root)
#向Text中添加10行文本
for i in range(1,10):
    t.insert(1.0,'❤❤❤❤❤❤❤❤\n')
#定义各个Button的回调函数,这些函数使用了内置的 mark:INSERT/CURRENT/END/SEL_FIRST/SEL_LAST
def insertText():
    t.insert(INSERT,' Love❤')
def currentText():
    t.insert(CURRENT,' Love❤')
def endText():
    t.insert(END,' Love❤')
def selFirstText():
    t.insert(SEL_FIRST,' Love❤')
def selLastText():
    t.insert(SEL_LAST,' Love❤')
#INSERT
Button(root,
       text = 'insert Love❤ at INSERT',
       command = insertText
       ).pack(fill = X)
#CURRENT
Button(root,
       text = 'insert Love❤ at CURRENT',
       command = insertText
       ).pack(fill = X)
#END
Button(root,
       text = 'insert Love❤ at END',
       command = endText
       ).pack(fill = X)
#SEL_FIRST
Button(root,
       text = 'insert Love❤ at SEL_FIRST',
       command = selFirstText
       ).pack(fill = X)
#SEL_LAST
Button(root,
       text = 'insert Love❤  at SEL_LAST',
       command = selLastText
       ).pack(fill = X)

t.pack()
root.mainloop()
#几个内置的mark:
#INSERT:光标的插入点
#CURRENT:鼠标的当前位置所对应的字符位置
#END:这个Text buffer的最后一个字符
#SEL_FIRST:选中文本域的第一个字符,如果没有选中区域则会引发异常
#SEL_LAST:选中文本域的最后一个字符,如果没有选中区域则会引发 异常

使用表达式来增强mark
表达式(expression)可以个性任何的Indexes
– count chars :前移count字符
– count chars : 后移count字符
– count lines : 前移count行
– count lines : 后移count行
– linestart: 移动到行的开始
– linesend: 移动到行的结束
– wordstart:移动到字的开始
– wordend:移动到字的结束

from Tkinter import *
root = Tk()
t = Text()
# 向第一行,第一列添加文本0123456789
for i in range(1,10):
    t.insert(1.0,'0123456789\n')
a = 'test_mark'
def forwardChars():
    # 直接连接字符串
    t.mark_set(a,CURRENT + '+ 5 chars')
    # t.mark_set(a,CURRENT + '+5c')
def backwardChars():
    # t.mark_set(a,CURRENT + '- 5 chars')
    t.mark_set(a,CURRENT + '-5c')
def forwardLines():
    # t.mark_set(a,CURRENT + '+ 5 lines)
    t.mark_set(a,CURRENT + '+5l')
def backwardLines():
    # t.mark_set(a,CURRENT + '- 5 lines)
    t.mark_set(a,CURRENT + '-5l')
def lineStart():
    # 注意linestart前面的那个空格不可省略
    t.mark_set(a,CURRENT + ' linestart')
def lineEnd():
    # 注意lineend前面的那个空格不可省略
    t.mark_set(a,CURRENT + ' lineend')
def wordStart():
    # 移动到当前字的开始。
    t.mark_set(a,CURRENT + ' wordstart')
def wordend():
    # 移动到当前字的结束
    t.mark_set(a,CURRENT + ' wordend')
# mark:test_mark默认值为CURRENT
t.mark_set(a,CURRENT)
Button(root,text = 'forward 5 chars',command = forwardChars).pack(fill = X)
Button(root,text = 'backward 5 chars',command = backwardChars).pack(fill = X)
Button(root,text = 'forward 5 lines',command = forwardLines).pack(fill = X)
Button(root,text = 'backward 5 lines',command = backwardLines).pack(fill = X)
Button(root,text = 'line start',command = lineStart).pack(fill = X)
Button(root,text = 'line end',command = lineEnd).pack(fill = X)
Button(root,text = 'word start',command = lineEnd).pack(fill = X)
Button(root,text = 'word end',command = lineEnd).pack(fill = X)
# 测试三个位置的不同,CURRENT可以得知是当前光标的位置;mark就表示mark的位置了,INSERT好像一植都在1.0处没有改变。
def insertText():
    t.insert(INSERT,'insert')
def currentText():
    t.insert(CURRENT,'current')
def markText():
    t.insert(a,'mark')
Button(root,text = 'insert jcodeer.cublog.cn',command = insertText).pack(fill = X)
Button(root,text = 'current jcodeer.cublog.cn',command = currentText).pack(fill = X)
Button(root,text = 'mark jcodeer.cublog.cn',command = markText).pack(fill = X)
t.pack()
root.mainloop()

滑动条移动读取文本:

from Tkinter import *
root=Tk()
S=Scrollbar(root)
T=Text(root,height=5,width=50)
S.pack(side=RIGHT,fill=Y)
T.pack(side=LEFT,fill=Y)
S.config(command=T.yview)
T.config(yscrollcommand=S.set)
quote='T ext widg ets provide advanced capabilities that allow you to edit a multiline text and format the way it has to be displayed, such as chang ing its color and font.\
You can also use eleg ant structures like tabs and marks to locate specific sections of the text, and apply chang es\
to those areas. Moreover, you can embed windows and imag es in the text because this widg et was desig ned to\
handle both plain and formatted text.'
T.insert(END,quote)
mainloop()
from Tkinter import *
root=Tk()

text1=Text(root,height=20,width=30)
photo=PhotoImage(file='D:/temp/1.gif')
text1.insert(END,'\n')
text1.image_create(END,image=photo)

text1.pack(side=LEFT)

text2=Text(root,height=20,width=50)
scroll=Scrollbar(root,command=text2.yview)
text2.tag_config('bold_italics',font=('Arial',12,'bold','italic'))
text2.tag_config('big',font=('Verdana',20,'bold'))
text2.tag_config('color',foreground='#476042',font=('Tempus Sans ITC',12,'bold'))
text2.tag_bind('follow','<1>',lambda  e,t=text2:t.insert(END,'NO Pass'))
text2.insert(END,'\n Flower\n','big')
quto='池中荷花'
text2.insert(END,quto,'color')
text2.insert(END,'follow-up\n','follow')
text2.pack(side=LEFT)
scroll.pack(side=RIGHT,fill=Y)

root.mainloop()

tag _config:您可以使用此方法来配置标记属性,其中包括:对齐(中心、左或右)、选项卡(此属性与文本小部件选项卡的属性具有相同的功能)和下划线(用于下划线标记的文本)。

赞(1) 打赏
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

小白学堂,学的不止是技术,更是前程

关于我们免责声明

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏