python桌面开发:tkinter基础知识科普,也许你想学习的知识这里都有

好吧,写了这么多关于python桌面开发的博文,今天终于开始回过头来,把tkinter的基础知识进行科普一下了。

一路走来,不容易! 贵在持之以恒

OK,这篇大而全的科普文章,经过整理和参考多方的资料,终于完工了。可喜可贺!在此也感谢前辈的努力和分享!
下面正式进入正题:tkinter基础知识科普,也许你想学习的知识这里都有

一、什么是GUI

GUI,是 Graphics User Interface(图形用户界面)的缩写。在 GUI 中,并不只是输入文本和返回文本,用户可以看到窗口、按钮、文本框等组件,还可以通过鼠标和键盘操作应用。

GUI 是程序交互的一种不同的方式,使用 GUI 开发的程序,和命令行程序一样,都具有输入数据、处理数据和输出数据这3个基本要素,只不过,使用 GUI 开发的程序,它们的输入和输出方式更丰富,更有趣。

二、 PYTHON的GUI库

Python GUI 常用库

库名特点
wxPythonwxPython 是一个跨平台的 GUI 工具集,以流行的 wxWidgets(原名 wxWindows)为基础,提供了良好的跨平台外观。简单来说,wxPython 在 Windows上调用 Windows 的本地组件、在 Mac OS 上调用 Mac OS X 的本地组件、在 Linux 上调用 Linux 的本地组件,这样可以让 GUI 程序在不同的平台上显示平台对应的风格。wxPython 是一个非常流行的跨平台的 GUI 库。其官方网址是http://www.wxpython.org/。
PyQtPyQt 是 Python 编程语言和 Qt 库的成功融合。Qt 本身是一个扩展的 C++ GUI 应用开发框架,Qt 可以在 UNIX、Windows 和 Mac OS X 上完美运行,因此 PyQt 是建立在 Qt 基础上的 Python 包装。所以 PyQt 也能跨平台使用。
PyGTKPyGTK 基于老版本的 GTK+2 的库提供绑定,借助于底层 GTK+2 所提供的各种可视化元素和组件,同样可以开发出在 GNOME 桌面系统上运行的软件,因此它主要适用于 Linux/UNIX 系统。PyGTK 对 GTK+2 的 C 语言进行了简单封装,提供了面向对象的编程接口。其官方网址是http://www.pygtk.org/。
Pywin32Windows Pywin32 库允许我们像 VC 一样的形式使用 Python 开发 win32 应用。
KivyKivy 是一个开源库,它能够让使用相同源代码创建的程序实现跨平台运行。同时,Kivy 主要关注创新型用户界面开发,例如多点触摸应用程序。
FlexxFlexx 是一个纯 Python 工具包,可以用来创建图形化界面程序,还支持使用 Web 技术进行界面的渲染。

三、 什么是tkinter

Tkinter 是 Python 标准 GUI 库,其最初是为 Tcl(这是一门工具命令语言,而不是某个电视机品牌)设计的,由于其良好的可移植性和灵活性,加上非常容易使用,因此逐渐被移植到很多脚本语言中,包括 Perl、Ruby 和 Python。

本章就来重点介绍 Tkinter 库。由于它是 Python 自带的 GUI 库,因此无须进行额外的下载安装,只要导入 tkinter包即可。

(一) 容器+组件的设计思维

任何GUI界面都可被分解成一个空的容器,容器里盛装了大量的基本组件,通过设置这些基本组件的大小、位置等属性,就可以将该空的容器和基本组件组成一个整体的窗口。
实际上,图形界面编程非常简单,它非常类似于小朋友玩的拼图游戏,容器类似于拼图的“母板”,而普通组件(如 Button、Listbox 之类的)则类似于拼图的图块。创建图形用户界面的过程就是完成拼图的过程。

(二) 多重继承的架构模式

由于这些组件之间存在错综复杂的继承关系,因此先通过类图来了解各 GUI 组件,以及它们之间的关系。Tkinter 的GUI 组件之间的继承关系如图所示。
Tkinter的GUI 组件之间的继承关系

1. 根父类Misc和Wm

Tkinter 的 GUI 组件有两个根父类,它们都直接继承了 object 类:
Misc:它是所有组件的根父类。
Wm:它主要提供了一些与窗口管理器通信的功能函数。
对于 Misc 和 Wm 两个基类而言,GUI 编程并不需要直接使用它们,但由于它们是所有 GUI 组件的父类,因此 GUI 组件都可以直接使用它们的方法。

2. 子类 Tk

Misc 和 Wm 派生了一个子类 Tk,它代表应用程序的主窗口。因此所有 Tkinter GUI 编程通常都需要直接或间接使用该窗口类。

3. 组件基类 BaseWidget

BaseWidget 是所有组件的基类,它还派生了一个子类 Widget。Widget 代表一个通用的 GUI 组件,Tkinter 所有的 GUI 组件都是 Widget 的子类。
再来看 Widget 的父类。Widget 一共有四个父类,除 BaseWidget 之外,还有 Pack、Place 和 Grid,这三个父类都是布局管理器,它们负责管理所包含的组件的大小和位置。

4. UI组件

剩下的就是图右边所显示的Widget 的子类了,它们都是Tkinter GUI编程的各种 UI 组件,也就是前面所说的各种“积木块”。表中简单介绍了各 GUI 组件的功能。
在这里插入图片描述

四、 一个入门案例

此处只是简单地介绍了这些 GUI 组件,读者有一个大致印象即可,先不用太熟悉它们。下面通过一个简单的例子来创建一个窗口:

# Python 2.x使用这行
#from Tkinter import *
# Python 3.x使用这行
from tkinter import *
# 创建Tk对象,Tk代表窗口
root =Tk()
# 设置窗口标题
root.title('窗口标题')
# 创建Label对象,第一个参数指定该Label放入root
w =Label(root, text="Hello Tkinter!")
# 调用pack进行布局
w.pack()
# 启动主窗口的消息循环
root.mainloop()

上面程序主要创建了两个对象 Tk 和 Label。其中 Tk 代表顶级窗口,Label 代表一个简单的文本标签,因此需要指定将该 Label 放在root容器内。

五、 配置方法

配置 GUI 组件的方法有以下 3 种:
以关键字参数的方式配置。例如 Button(self, text=“确定”),其中 text = “确定” 就指定了该按钮上的文本是“确定”。

#创建Button 对象,在创建时就配置它的文本和背景色
okButton =Button(self, text ="确定", background ='yellow')

以字典语法进行配置。例如 okButton[‘background’]=‘yellow’,这种语法使得 okButton 看上去就像一个字典,它用于配置 okButton 的 background 属性,从而改变该按钮的背景色。

okButton ['text']= '确定'

以configure方式进行配置:

okButton.configure(text = '确定')

六、 控件的共同属性

在窗体上呈现的可视化控件,通常包括尺寸、颜色、字体、相对位置、浮雕样式、图标样式和悬停光标形状等共同属性。不同的控件由于形状和功能不同,又有其特征属性。在初始化根窗体和根窗体主循环之间,可实例化窗体控件,并设置其属性。父容器可为根窗体或其他容器控件实例。常见的控件共同属性如下表:

在这里插入图片描述

七、 查看帮助文档

help(tkinter.Button.__init__):查看 Button 的构造方法的帮助文档,Button 支持两组选项:标准选项(STANDARD OPTIONS)组件特定选项(WIDGET-SPECIFIC OPTIONS)

  • Grid 支持的选项,可以通过执行 help(tkinter.Label.grid) 命令查看(执行此命令之前,一定要先引入 Tkinter 包)。
  • pack 布局管理器支持的选项,可以通过help(tkinter.Label.pack)命令来查看,有兴趣的读者可自行查看。
  • place() 方法支持的所有选项,可通过执行help(tkinter.Label.place) 命令查看(一定要先导入 Tkinter 包)。
    在这里插入图片描述

八、事件处理

前面介绍了如何放置各种组件,从而得到了丰富多彩的图形界面,但这些界面还不能响应用户的任何操作。比如单击窗口上的按钮,该按钮并不会提供任何响应。这就是因为程序没有为这些组件绑定任何事件处理的缘故。

(一) command方法

简单的事件处理可通过 command 选项来绑定,该选项绑定为一个函数或方法,当用户单击指定按钮时,通过该 command 选项绑定的函数或方法就会被触发。下面程序示范了为按钮的 command 绑定事件处理方法:

(二) bind方法

上面这种简单的事件绑定方式虽然简单,但它存在较大的局限性:

程序无法为具体事件(比如鼠标移动、按键事件)绑定事件处理方法。
程序无法获取事件相关信息。

为了弥补这种不足,Python 提供了更灵活的事件绑定方式,所有 Widget 组件都提供了一个 bind() 方法,该方法可以为“任意” 事件绑定事件处理方法。
下面先看一个为按钮的单击、双击事件绑定事件处理方法的示例:

九、 Variable变量处理

Tkinter 支持将很多 GUI 组件与变量进行双向绑定,执行这种双向绑定后编程非常方便:
• 如果程序改变变量的值,GUI 组件的显示内容或值会随之改变。
• 当 GUI 组件的内容发生改变时(比如用户输入),变量的值也会随之改变。
为了让 Tkinter 组件与变量进行双向绑定,只要为这些组件指定 variable(通常绑定组件的 value)、textvariable(通常绑定组件显示的文本)等属性即可。
但这种双向绑定有一个限制,就是 Tkinter不允许将组件和普通变量进行绑定,只能和 tkinter 包下 Variable 类的子类进行绑定。该类包含如下几个子类:

• ShringVar():用于包装str 值的变量。
• IntVar():用于包装整型值的变量。
• DoubleVar():用于包装浮点值的变量。
• BooleanVar():用于包装bool值的变量。

对于 Variable 变量而言,如果要设置其保存的变量值,则使用它的 set() 方法;如果要得到其保存的变量值,则使用它的 get() 方法。
下面程序示范了将 Entry 组件与 StringVar 进行双向绑定,这样程序既可通过该 StringVar 改变 Entry 输入框显示的内容,也可通过该 StringVar 获取 Entry 输入框中的内容。

先写到这里,后续将持续更新。
欢迎持续关注,感谢支持!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Pythontkinter中添加超链接,你可以使用Text组件的tag_bind()方法来实现。首先,你需要在Text组件中插入文本,然后使用tag_add()方法给要添加超链接的文本添加一个标签。接下来,使用tag_bind()方法将这个标签与一个回调函数绑定,这个回调函数会在用户点击超链接时被调用。在回调函数中,你可以执行相应的操作,比如打开一个网页。 下面是一个示例代码,演示了如何在tkinter中添加超链接: ```python import tkinter as tk def open_link(event): # 在这个回调函数中执行打开链接的操作 print("打开链接") root = tk.Tk() text = tk.Text(root) text.pack() # 在Text组件中插入文本 text.insert(tk.END, "Pythontkinter:") text.insert(tk.END, "tkinter带你进入GUI世界", "link") # 给文本添加一个标签 # 给标签添加超链接的样式 text.tag_config("link", foreground="blue", underline=True) # 绑定回调函数到标签 text.tag_bind("link", "<Button-1>", open_link) root.mainloop() ``` 在这个例子中,我们在Text组件中插入了两段文本,其中一段文本被标记为"link",并且绑定了一个回调函数open_link()。当用户点击带有"link"标签的文本时,回调函数open_link()会被调用。你可以在这个回调函数中执行你要的操作,比如打开一个网页。 注意:在示例中,回调函数open_link()只是简单地打印了一条消息。你可以根据自己的需求来修改这个函数,例如使用webbrowser模块在浏览器中打开链接。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值