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

简介

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中位置的一类符号
markINSERT/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:您可以使用此方法来配置标记属性,其中包括:对齐(中心、左或右)、选项卡(此属性与文本小部件选项卡的属性具有相同的功能)和下划线(用于下划线标记的文本)。

来源:http://blog.csdn.net/liuxu0703/article/details/60781513

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HySmiley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值