《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7

这篇具有很好参考价值的文章主要介绍了《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上节课我们介绍了Text组件的Indexs 索引和 Marks 标记,它们主要是用于定位,Marks 可以看做是特殊的 Indexs,但是它们又不是完全相同的,比如在默认情况下,你在Marks指定的位置中插入数据,Marks 的位置会自动发生改变, 因为Marks 认它后面的“那个家伙”,当 Marks 前面的数据被删除时,Marks 并不会被删除,它的位置只是相应的向前移动了,只有 mark_unset() 方法 才能够删除Marks,这节课我们接着来介绍 Tags 的用法。

Tags(标签)通常用于改变 Text 组件中内容的样式和功能。你可以修改文本的字体、尺寸和颜色。另外,Tags 还允许你将文本、嵌入的组件和图片与键盘和鼠标等事件相关联。除了 user-defined tags(用户自定义的 Tags),还有一个预定义的特殊 Tag:SEL。

SEL(或 "sel")用于表示对应的选中内容(如果有的话)。

你可以自定义任意数量的 Tags,Tags 的名字是由普通字符串组成,可以是除了空白字符外的任何字符。另外,任何文本内容都支持多个 Tags 描述,任何 Tag 也可以用于描述多个不同的文本内容。

我们来举个例子:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. text = tk.Text(root, width=40, height=5,)

  4. text.pack()

  5. text.insert("insert", 'I love Python.com')

  6. text.tag_add("tag1", "1.7", "1.13", "1.15")

  7. text.tag_config("tag1", background = "yellow", foreground = "red")

  8. root.mainloop()文章来源地址https://www.toymoban.com/news/detail-615249.html

《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7,python

还有一点需要注意的是:如果你对同一个范围内的文本加上多个 Tags,并且设置相同的选项,那么新创建的 Tag 样式会覆盖比较旧的 Tag:

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. text = tk.Text(root, width=40, height=5)

  4. text.pack()

  5. text.insert("insert", 'I love Python.com')

  6. text.tag_add("tag1", "1.7", "1.13", "1.15")

  7. text.tag_add("tag2", "1.7", "1.13", "1.15")

  8. text.tag_config("tag2", foreground = "green")

  9. text.tag_config("tag1", background = "yellow", foreground = "red")

  10. root.mainloop()

《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7,python

那么新创建的 Tag2 会覆盖比较旧的 Tag1 的相同选项, 注意,与下边的调用顺序没有关系

你或许想控制 Tags 间的优先级,这可以实现吗?完全没有问题!你可以使用 tag_raise() 和 tag_lower() 方法来提高和降低某个 Tag 的优先级。

 
  1. import tkinter as tk

  2. root = tk.Tk()

  3. text = tk.Text(root, width=40, height=5)

  4. text.pack()

  5. text.tag_config("tag1", background="yellow", foreground="red")

  6. text.tag_config("tag2", foreground="green")

  7. text.tag_lower("tag2")

  8. text.insert("insert", "I love Python!", ("tag2", "tag1"))

  9. root.mainloop()

《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7,python

另外 Tags 还支持事件绑定,使用的是 tag_bind() 的方法。

下边例子中我们将文本("Python.com")与鼠标事件进行绑定,当鼠标进入该文本段的时候,鼠标样式切换为 "arrow" 形态,离开文本段的时候切换回 "xterm" 形态。当触发鼠标“左键点击操作”事件的时候,使用默认浏览器打开Python的首页(Welcome to Python.org):

 
  1. import tkinter as tk

  2. import webbrowser

  3. root = tk.Tk()

  4. text = tk.Text(root, width=40, height=5)

  5. text.pack()

  6. text.insert("insert", "I love Python.com!")

  7. text.tag_add("link", "1.7", "1.17")

  8. text.tag_config("link", foreground = "blue", underline = True)

  9. def show_arrow_cursor(event):

  10. text.config(cursor = "arrow")

  11. def show_xterm_cursor(event):

  12. text.config(cursor = "xterm")

  13. def click(event):

  14. webbrowser.open("https://www.python.org/")

  15. text.tag_bind("link", "<Enter>", show_arrow_cursor)

  16. text.tag_bind("link", "<Leave>", show_xterm_cursor)

  17. text.tag_bind("link", "<Button-1>", click)

  18. root.mainloop()

接下来给大家介绍几个 Tags 使用上的技巧:

(一)判断内容是否发生变化

通过校检 Text 组件中文本的 MD5 摘要来判断内容是否发生改变

 
  1. import tkinter as tk

  2. import hashlib

  3. root = tk.Tk()

  4. text = tk.Text(root, width=40, height=5)

  5. text.pack()

  6. text.insert("insert", "I love Python.com!")

  7. contents = text.get("1.0", "end")

  8. def getSig(contents):

  9. m = hashlib.md5(contents.encode())

  10. return m.digest()

  11. sig = getSig(contents)

  12. def check():

  13. contents = text.get("1.0", "end")

  14. if sig != getSig(contents):

  15. print("警报:内容发生改变!")

  16. else:

  17. print("风平浪静")

  18. tk.Button(root, text = "检查", command = check).pack()

  19. root.mainloop()

(二)查找操作

使用 search() 方法可以搜索 Text 组件中的内容。但是传统的 search() 方法只查找到一个,就返回,我们可以加入一个循环,查找所有的。

 
  1. import tkinter as tk

  2. import hashlib

  3. root = tk.Tk()

  4. text = tk.Text(root, width=40, height=5)

  5. text.pack()

  6. text.insert("insert", "I love Python.com!")

  7. def getIndex(text, index):

  8. return tuple(map(int, str.split(text.index(index), ".")))

  9. start = "1.0"

  10. while True:

  11. pos = text.search("o", start, stopindex = "end")

  12. if not pos:

  13. break

  14. print("找到啦,位置是:", getIndex(text, pos))

  15. start = pos + "+1c"

  16. root.mainloop()

(三)恢复、撤销操作

Text 组件还支持“恢复”和“撤销”操作,这使得 Text 组件显得相当高大上。

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

 
  1. import tkinter as tk

  2. import hashlib

  3. root = tk.Tk()

  4. text = tk.Text(root, width=40, height=5, undo = True)

  5. text.pack()

  6. text.insert("insert", "I love Python.com!")

  7. def show():

  8. text.edit_undo()

  9. tk.Button(root, text = "撤销", command = show).pack()

  10. root.mainloop()

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

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

那我们能不能自定义呢?比如我希望插入一个字符就算一次完整的操作,然后每次点击“撤销”就去掉一个字符。

当然可以!做法就是先将 autoseparators 选项设置为 False(因为这个选项是让 Tkinter 在认为一次完整的操作结束后自动插入“分隔符”),然后绑定键盘事件,每次有输入就用 edit_separator() 方法人为地插入一个“分隔符”:

 
  1. import tkinter as tk

  2. import hashlib

  3. root = tk.Tk()

  4. text = tk.Text(root, width=40, height=5, undo = True, autoseparators = False)

  5. text.pack()

  6. text.insert("insert", "I love Python.com!")

  7. def callback(event):

  8. text.edit_separator() #人为插入分隔符

  9. text.bind('<Key>', callback)

  10. def show():

  11. text.edit_undo()

  12. tk.Button(root, text = "撤销", command = show).pack()

  13. root.mainloop()

到了这里,关于《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 30天入门Python(基础篇)——第2天:Python安装(保姆级)与IDE的认识与选择+详细安装教程(万字建议收藏)

    🔥🔥本文已收录于《30天学习Python从入门到精通》 🉑🉑本专栏专门 针对于零基础和需要重新复习巩固的同学 所准备的一套基础班教学, 从0基础到精通Python ,轻松掌握Python,欢迎各位同学订阅,专栏订阅地址:点我直达 🤞🤞此外如果您已工作,如需利用Python解决办公中

    2024年02月07日
    浏览(60)
  • MATLAB App Designer基础教程 Matlab GUI入门(四)

    绘制函数图像 显示图像(jpg png tiff) App designer中 plot 和命令行中的 plot函数的不同; 如何在坐标轴空间中显示两个函数图像; 智能缩进 (Ctrl + I) 颜色选项: r -红色 g - 绿色 b - 蓝色 w - 白色 k - 黑色 去除边框技巧(隐藏边框技巧),界面设置(代码设置)框样式 更改网格

    2024年02月12日
    浏览(46)
  • 【python零基础入门学习】python基础篇(一)

    官方: www.python.org,自行安装,linux上有自带python,win自行安装。 [student@room9pc01 05]$ python --version Python 2.7.5  #创建虚拟环境: [root@room9pc01 bin]# pwd /root/nsd1907/bin [root@room9pc01 bin]# ls activate  activate.csh  activate.fish  easy_install  easy_install-3.6  pip  pip3  pip3.6  python  python3 [root@room9p

    2024年02月11日
    浏览(39)
  • 【零基础入门学习Python---Python中Web开发基础之快速入门实践】

    🚀 零基础入门学习Python🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题

    2024年02月12日
    浏览(71)
  • 【Python学习篇】Python基础入门学习——你好Python(一)

     个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755@qq.com 🦉个人WeChat:Vir2021GKBS 🐼 本文由妄北y原创,首发CSDN 🎊🎊🎊 🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。 专栏导航: 妄北y系列专栏导航:   C/C++的

    2024年03月09日
    浏览(55)
  • Python入门篇(八)---GUI编程

    目录 GUI编程的概念和应用领域 GUI编程概念 GUI编程应用领域 Tkinter库的使用 创建一个GUI应用程序 控件 标签控件 按钮控件 文本框控件 按钮控件(Button) PyQt库的使用 安装PyQt库 创建一个PyQt窗口 添加标签和按钮  Python中常用的GUI编程工具有多种,比如Tkinter、wxPython、PyQt等等。

    2024年02月08日
    浏览(44)
  • 手机Python爬虫教程:利用手机学习Python爬虫的终极指南

    在数字化时代,手机已经成为人们生活中不可或缺的一部分。而Python爬虫作为一种强大的数据获取工具,也受到越来越多人的关注。但是,是否可以利用手机进行Python爬虫学习呢?本文将介绍如何通过手机学习Python爬虫,为你打开一扇全新的学习之门。 1. 《Python爬虫入门教程

    2024年02月07日
    浏览(55)
  • 【零基础入门学习Python---Python函数和模块】

    🚀 Python 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验

    2024年02月11日
    浏览(43)
  • 【零基础入门学习Python---Python中安全编程和测试之快速入门实践】

    🚀 零基础入门学习Python🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题

    2024年02月12日
    浏览(67)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包