tkinter-text详解(3)

Text.Get('1.'0' END) --- 获得text内容

eg:通过hashlib.md5 -- 检测内容变动

	from tkinter import *
	import hashlib
	
	root = Tk()
	text = Text(root, width=20, height=10)
	text.pack()
	
	text.insert('1.0', 'Love is burn into peace')
	
	contents = text.get('1.0', END)
	
	def getSig(contents):
	    m = hashlib.md5(contents.encode())
	    return m.digest()
	
	org = getSig(contents)
	
	def check():
	    new_content = text.get('1.0', END)
	    if org != getSig(new_content):
	        print('情况有变,小心traitor!')
	    else:
	        print('一切如旧~')
	
	Button(root, text='稽查', command=check).pack()
	
	mainloop()

Text.Search()

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 的字符个数)

Eg: 查找字符串

	from tkinter import *
	
	root = Tk()
	text = Text(root, width=20, height=10)
	text.pack()
	
	text.insert('1.0', 'Love is burn into peace')
	
	def getIndex(text, inx):
	    return tuple(map(int, text.index(inx).split('.')))
	
	start = '1.0'
	while True:
	    loc= text.search('o', start, stopindex=END) #查找到第一个结果后返回line.num并停止
	    if not loc: #找不到结果时终止循环
	        break
	    print('found it in ', getIndex(text, loc))
	    start = loc + '+1c'  #向后移动一个字节,继续查找
	    
	mainloop()

撤销 和 恢复

通过设置 undo 选项为 True 可以开启 Text 组件的“撤销”功能。然后用 edit_undo() 方法实现“撤销”操作,用 edit_redo() 方法实现“恢复”操作。

这是因为 Text 组件内部有一个栈专门用于记录内容的每次变动,所以每次“撤销”操作就是一次弹栈操作,“恢复”就是再次压栈。

默认情况下,每一次完整的操作将会放入栈中。但怎么样算是一次完整的操作呢?Tkinter 觉得每次焦点切换、用户按下 Enter 键、删除\插入操作的转换等之前的操作算是一次完整的操作。也就是说你连续输入“FishC 是个 P”的话,一次的“撤销”操作就会将所有的内容删除。

做法就是先将 autoseparators 选项设置为 False(因为这个选项是让 Tkinter 在认为一次完整的操作结束后自动插入“分隔符”),然后绑定键盘事件,每次有输入就用 edit_separator() 方法人为地插入一个“分隔符”,这样插入一个字符就算一次完整的操作,然后每次点击“撤销”就去掉一个字符。

edit_redo(self)

-- “恢复”上一次的“撤销”操作

-- 如果 undo 选项为 False,该方法无效

-- 详见上方用法【“撤销”和“恢复”操作】

edit_separator()

-- 插入一个“分隔符”到存放操作记录的栈中,用于表示已经完成一次完整的操作

-- 如果 undo 选项为 False,该方法无效

-- 详见上方用法【“撤销”和“恢复”操作】

edit_undo()

-- 撤销最近一次操作

-- 如果 undo 选项为 False,该方法无效

-- 详见上方用法【“撤销”和“恢复”操作】

EG:

	from tkinter import *
	import hashlib
	
	root = Tk()
	# 'undo=True' 激活撤销/恢复功能
	# 'autoseparators=False' 关闭自动设置separator设置
	text = Text(root, width=30, height=10, undo=True, autoseparators=False, maxundo=10)
	text.pack()
	
	def typing(event):
	    text.edit_separator()
	
	def undo():
	    text.edit_undo()
	
	def redo():
	    text.edit_redo()
	
	text.bind('<Key>', typing) #绑定键盘按键,每次点击都设置separator,方便undo/redo
	text.insert('1.0', 'Love is burn into peace')
	
	Button(root, text='UNDO', command=undo).pack()
	Button(root, text='REDO', command=redo).pack()
	
	mainloop()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用tkinter的Text控件中,文字大小是由所使用的字体大小(font size)决定的。具体的显示高度(height)是以为单位进行设置的。在代码中,可以通过设置Text控件的height参数来控制显示的高度,而具体的字体大小则可以通过设置Text控件的font参数来进行调整。在引用的代码中,通过设置width和height参数来定义了Text控件的大小,然后使用Text控件的pack()方法进行布局。因此,要调整Text控件中文字的大小,可以通过设置Text控件的font参数来进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [记录python-tkinter包 Text控件中的更改文字颜色大小操作](https://blog.csdn.net/foneone/article/details/100915340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [tkinter-Text详解](https://blog.csdn.net/weixin_43708622/article/details/107303149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值