Python学习(28)--tkinter图形界面编程1

简介: Python学习(28)--tkinter图形界面编程1 这一节我们将介绍Python内置的图形界面编程模块tkinter,tkinter是Python标准的GUI编程接口,可以良好的运行在大多数的系统平台中,只需要安装好Python就可以导入tkinter模块并使用,无需安装第三方库。

Python学习(28)--tkinter图形界面编程1

这一节我们将介绍Python内置的图形界面编程模块tkinter,tkinter是Python标准的GUI编程接口,可以良好的运行在大多数的系统平台中,只需要安装好Python就可以导入tkinter模块并使用,无需安装第三方库。

tkinter的主要学习内容分为四个部分:tkinter组件,数据显示,布局以及鼠标事件。本节介绍的内容为tkinter控件,具体的内容为:主窗体,Lable控件,Button控件,Entry控件,Text控件。

1.主窗体

tkinter的所有控件都需要盛放在一个容器中,这个容器就是主窗体,在创建控件之前都必须要创建主窗体。主窗体的创建过程如下代码:

[python] view plain copy

  1. import tkinter
  2. win=tkinter.Tk()#创建一个窗体
  3. win.title("MyWindow")#为窗体添加一个标题
  4. win.geometry("400x300+120+50")#设置窗体的位置和大小
  5. win.mainloop()#显示生成的主窗体

 

如上代码,使用模块tkinter的方法Tk()创建一个窗体;title()方法设置窗体的标题;geometry()设置窗体的长宽和位置,字符串"400x300+120+50"为将窗体设置为长400px,宽300px,左上角顶点坐标位置为(120,50);方法mainloop()为将创建的窗体显示出来。

结果如下:

如上结果,窗体创建的的坐标系为:屏幕左上角顶点为坐标原点(0,0),原点向右为X轴,向下为Y轴,创建窗体时需要指定其左上角顶点的坐标和窗体的长宽,方式为调用窗体对象的geometry()方法,参数为一个字符串"widthxheight+X+Y",width指定窗体宽度,height指定窗体长度,X为窗体左上角顶点x轴坐标值,Y为窗体左上角顶点y轴坐标值。

2.Lable控件

Lable控件的主要功能为显示文本内容,也是GUI编程中常用的基本控件,Label主要学习内容为控件的各种属性,下面我们通过例子来一一讲解这些属性。代码如下:

 

[python] view plain copy

  1. import tkinter
  2. win=tkinter.Tk()#创建一个窗体
  3. win.title("MyWindow")#为窗体添加一个标题
  4. win.geometry("400x300+120+50")#设置窗体的位置和大小
  5. # Lable控件
  6. label=tkinter.Label(win,#设置子控件Lable的父容器为主窗体win
  7.               text="My name is LiMing",#Lable显示的文本内容
  8.               bg="red",#Lable的背景颜色
  9.               font=("黑体",20),#Lable显示文本的颜色和字体
  10.               width=10,#Lable控件的宽度
  11.               height=10,#Lable控件的长度
  12.               wraplength=50,#每wraplength宽度的文本换行一次
  13.             justify="left",#文本显示的方向,right为从右至左显示文本,left为从左至右显示文本
  14.               anchor="center")#文本显示内容在Lable中的位置,
  15. # 一共有n,s,e,w,ne,nw,se,sw,center九个方向,
  16. # 分别对应北,南,东,西,东北,西北,东南,西南,中心
  17. label.pack()#将子控件lable挂载到主窗体
  18. win.mainloop()#显示生成的主窗体

 

如上,使用tkinter模块的Label()方法创建一个Label控件,首先需要指定父容器,所谓父容器通俗的含义就是子控件放在哪个父控件中显示,这里指定Label的父容器为主窗体win;接着,可以使用Label控件的各种属性设置文本内容显示的样式。如text属性设置文本显示的内容,bg设置Label的背景颜色等等。如上的注释,可以清楚的看到Label各种属性及其作用和含义。学习tkinter的各种控件,了解其属性的使用是一个重要内容。

代码结果如下:

3.Button控件

Button控件为常见的按钮,功能主要为点击按钮后响应相应的操作。如下代码:

[python] view plain copy

  1. import tkinter
  2. win=tkinter.Tk()#创建一个窗体
  3. win.title("MyWindow")#为窗体添加一个标题
  4. win.geometry("400x300+120+50")#设置窗体的位置和大小
  5. def func():#点击按钮后响应的函数
  6.     print("您点击了按钮")
  7. # Button控件
  8. button=tkinter.Button(win,#设置子控件Button的父容器为主窗体win
  9.                       text="button",#设置Button按钮显示的文本内容
  10.                       command=func,#设置点击按钮后响应的事件,这里点击按钮后会执行函数func
  11.                       width=10,#设置按钮的宽度
  12.                       height=4)#设置按钮的长度
  13. button.pack()#将Button控件挂载到主窗体上
  14. win.mainloop()#显示生成的主窗体

如上代码,Button中涉及的属性有text,command,width,height等等。其实,这些都是很多控件通用的属性,如text为设置在控件上显示的文本内容,command为设置点击控件后需要响应的函数操作,这里command=func,表示点击按钮后会执行函数func()。代码运行结果如下:

点击按钮执行函数func()后的打印结果如下:

4.Entry控件

Entry是一个文本输入框控件,用于文本的输入,主要功能为接收用户向应用程序传达的消息。以下是一个Entry控件的案例及代码注释:

 

[python] view plain copy

  1. import tkinter
  2. win=tkinter.Tk()#创建一个窗体
  3. win.title("MyWindow")#为窗体添加一个标题
  4. win.geometry("400x300+120+50")#设置窗体的位置和大小
  5. #Entry控件
  6. e=tkinter.Variable()#创建一个变量e
  7. entry=tkinter.Entry(win,#设置Entry控件的父容器为win
  8.                     # show="*",#设置输入框为密码框
  9.                     textvariable=e)#将变量e与控件entry绑定
  10. e.set("我是输入框")#设置输入框对象的文本内容
  11. print("e.get:",e.get())#通过与Entry控件绑定的变量e获取输入内容
  12. print("entry.get:",entry.get())#通过Entry对象直接获取文本框内容
  13. entry.pack()#将Entry控件挂载到父控件窗体上
  14. win.mainloop()#显示生成的主窗体

 

如上代码,使用tkinter模块的Entry()方法创建一个文本输入框,那么应用程序如何获知用户在文本框中的输入内容呢?这里有两种方法:

第一种方法,直接调用Entry对象的get()方法获取文本内容,如上entry.get()。但这种方法的局限性在于,只能获取文本框的内容,并不能实时的修改文本内容。

第二种方法为,将Entry对象与一个变量var绑定,所有对文本内容的读写都是在基于var进行的,var就相当于用户与文本框进行信息交流的窗口。

如上,首先我们通过tkinter模块的Variable()方法创建一个变量e;

然后,将entry对象的textvariable的属性值设置为e,此时文本框对象entry与e绑定起来;

最后,通过变量e对文本框进行读写操作,如e.get()为获取entry对象的文本内容,e.set()为设置entry对象的文本内容。此时,文本框entry的内容由与之绑定的变量e操控,显然第二种方法将控件与文本输入数据分离开,操作的灵活性更强。

程序运行结果如下:

 

对输入框文本内容读取的打印结果如下:

文本输入框Entry还有一个重要属性show,当用户输入的内容为密码时,就用到了它。show="*"时,用户输入的内容不再可见,而是成为密码形式的"******"字符串。如下为当属性show="*"时的程序运行结果:

5.Text控件

之前介绍过的Entry控件只适用于用户输入少量的,重要的文本。当我们需要输入并编辑大量的文本时,如发送一封邮件,就需要使用Text多文本输入控件。可以将Text控件类比于Windows操作系统的txt文档编辑器。如下例子,Text控件可看作为把txt编辑器内嵌入程序主窗体中。

[python] view plain copy

  1. import tkinter
  2. win=tkinter.Tk()#创建一个窗体
  3. win.title("MyWindow")#为窗体添加一个标题
  4. win.geometry("200x100+120+50")#设置窗体的位置和大小
  5. # Text控件
  6. text=tkinter.Text(win,#设置Text控件的父容器为win
  7.                   width=20,
  8.                   height=5)
  9. str='''''There are moments in life when you miss
  10.  someone so much that you just want to pick them
  11.  from your dreams and hug them for real! Dream
  12.  what you want to dream;go where you want to go;
  13.  be what you want to be,because you have only one
  14.  life and one chance to do all the things you want to do.
  15.  '''
  16. text.insert(tkinter.INSERT,str)#为text文本框添加文本内容str
  17. text.pack()#将text文本框挂载到父容器
  18. win.mainloop()#显示生成的主窗体

 

如上,通过tkinter模块的Text()方法创建了一个多文本输入对象text,并设置其宽和高。Text对象的一个很常用的方法就是insert(),用于向多文本输入框中插入文本,如上对象text调用insert()方法插入文本内容,参数tkinter.INSERT表示向文本插入文本str。代码执行的结果如下:

 

通过观察可以发现,文本内容并不能完全显示,这是因为整个文本的长和宽大于Text控件的长和宽,导致只能部分显示文本。类比于txt编辑器,当文本内容溢出时,我们可以使用滑动条,通过滑动来显示溢出部分的文本。添加滑动条后的代码如下:

 

[python] view plain copy

  1. import tkinter
  2. win=tkinter.Tk()#创建一个窗体
  3. win.title("MyWindow")#为窗体添加一个标题
  4. win.geometry("200x100+120+50")#设置窗体的位置和大小
  5. # Text控件
  6. text=tkinter.Text(win,#设置Text控件的父容器为win
  7.                   width=20,
  8.                   height=5)
  9. str='''''There are moments in life when you miss
  10.  someone so much that you just want to pick them
  11.  from your dreams and hug them for real! Dream
  12.  what you want to dream;go where you want to go;
  13.  be what you want to be,because you have only one
  14.  life and one chance to do all the things you want to do.
  15.  '''
  16. text.insert(tkinter.INSERT,str)#为text文本框添加文本内容str
  17. scroll=tkinter.Scrollbar()#创建一个滑动条
  18. text.pack(side=tkinter.LEFT,fill=tkinter.Y)#设置文本框在父容器的左侧,
  19. # 文本框在父容器的Y方向充满
  20. scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)#设置滑动条在父容器的右侧,
  21. # 滑动条在父容器的Y方向上充满
  22. win.mainloop()#显示生成的主窗体

 

如上,我们通过tkinter模块的Scrollbar()方法创建了一个滑动条,side=tkinter.LEFT表明将滑动条scroll显示在父容器(主窗体win)的右侧,fill=tkinter.Y表明滑动条scroll在Y方向上充满父容器。同理,调用pack()方法使得多文本框text显示在父容器的左侧,并在Y方向上充满父容器win。程序执行结果如下:

添加滑动条后,只是将滑动条显示出来。拉动后溢出的文本并没有随滑动条的移动而显示出来,这是因为文本框与滑动条只是独立的存在,并没有相互关联起来。二者之间应该存在两种关联:

第一,移动滑动条,文本随滑动条移动的方向移动;

第二,移动文本,滑动条随文本移动的方向移动。

若要产生这两种关联,就需要两者之间相互配置。代码如下:

[python] view plain copy

  1. import tkinter
  2. win=tkinter.Tk()#创建一个窗体
  3. win.title("MyWindow")#为窗体添加一个标题
  4. win.geometry("200x100+120+50")#设置窗体的位置和大小
  5. # Text控件
  6. text=tkinter.Text(win,#设置Text控件的父容器为win
  7.                   width=20,
  8.                   height=5)
  9. str='''''There are moments in life when you miss
  10.  someone so much that you just want to pick them
  11.  from your dreams and hug them for real! Dream
  12.  what you want to dream;go where you want to go;
  13.  be what you want to be,because you have only one
  14.  life and one chance to do all the things you want to do.
  15.  '''
  16. text.insert(tkinter.INSERT,str)#为text文本框添加文本内容str
  17. scroll=tkinter.Scrollbar()#创建一个滑动条
  18. text.pack(side=tkinter.LEFT,fill=tkinter.Y)#设置文本框在父容器的左侧,
  19. # 文本内容str在Text控件Y方向充满
  20. scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)#设置滑动条在父容器的右侧,
  21. # 滑动条在父容器的Y方向上充满
  22. scroll.config(command=text.yview)#配置滑动条scroll随文本text移动的方向移动
  23. text.config(yscrollcommand=scroll.set)#配置文本text随滑动条scroll移动的方向移动
  24. win.mainloop()#显示生成的主窗体

如上代码,我们在之前代码的基础上对滑动条scroll和文本text之间的关联做出了相应的配置。如:scroll.config(command=text.yview),即为当文本text在y方向上发生移动事件时,滑动条会做出随之移动的响应;text.config(yscrollcommand=scroll.set),即为text会在Y方向上随滑动条移动。程序的运行结果如下:

经过对滑动条scroll和文本text的相互配置,实现了两者间一方移动,另一方随之移动的效果。当然还可以在X方向上设置滑动条,这样就可以显示在X方向上的溢出文本。真正实现txt文档编辑器的效果。

以上就是这一节tkinter控件的内容,我们介绍了文本显示控件Label,按钮控件Button,文本输入控件Entry,多行文本输入控件Text。通过对这四种控件介绍可以发现,其实控件的学习有关原理性的内容并不是很多,只是需要我们熟练的掌握控件的属性和使用方法即可。

下一节,我们将继续介绍tkinter GUI编程,敬请期待。

原文地址http://www.bieryun.com/2395.html

相关文章
|
2月前
|
存储 Java 数据处理
(numpy)Python做数据处理必备框架!(一):认识numpy;从概念层面开始学习ndarray数组:形状、数组转置、数值范围、矩阵...
Numpy是什么? numpy是Python中科学计算的基础包。 它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/0 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 Numpy能做什么? numpy的部分功能如下: ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成由C、C++
357 1
|
2月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
222 1
|
2月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
337 1
|
2月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
224 3
|
2月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
484 3
|
2月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
304 3
|
2月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
183 4
|
2月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
319 0
|
安全 测试技术 数据库
Python编程--sys模块及OS模块简单用例
Python编程--sys模块及OS模块简单用例
189 1
|
JSON 数据格式 Python
Python编程:利用JSON模块编程验证用户
Python编程:利用JSON模块编程验证用户
117 1

推荐镜像

更多