辛星tkinter教程第二版

阅读: 评论:0

2024年2月3日发(作者:)

辛星tkinter教程第二版

辛星 2014年度辛星tkinter教程第二版 tkinter

2014年辛星tkinter教程第二版

2014年辛星Python界面编程教程第二版

建议:可以搜索“辛星 python”来找到更新更全的Python其他资料。

另外:我之前是写过一个“2014年度辛星tkinter教程第一版”,全书只有28页,非常简短,大家可以快速的浏览一遍,来有个宏观的认识,这次我是想把它完善起来。

说明:本书的写作时间是2014年7月,如果您在两年之后看到了本书,那么大可以丢弃,因为您肯定可以找到更新的版本了。

版权:本书是在参考了一些互联网上的资料之后产生的,但是觉不存在单纯的抄袭现象,而且由于想树立一个“辛星”的牌子,所以,版权完全归属于笔者本人所有。

说明:在当前Python3和Python2版本同时存在,且都有一定的影响力,但是两个版本之前还有着不小的差别。笔者在这里使用的是Python3.2,如果读者使用的是其他版本,可能有些代码需要做一些较小的改动以适应版本变动。

版本:我使用的版本是windows7,Python版本是Python3.2.5,Tkinter版本是8.5。

前进的路上,辛星陪伴您

只要星哥在,编程充满爱

1 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

前言…………………………………………………………4

第一部分:tkinter基础知识

第零节:认识tkinter……………………………………6

第一节:开始第一个tkinter程序………………………11

第二节:认识新组件—标签………………………………15

第三节:组件讲解以及按钮………………………………20

第四节:布局的讲解………………………………………27

第五节:事件………………………………………………32

第六节:输入框以及一个登录程序………………………36

第七节:菜单………………………………………………40

第八节:对话框和消息框…………………………………52

第九节:常用控件介绍……………………………………57

第十节:手绘图形…………………………………………64

第十一节:窗口的一些美化………………………………69

第十二节:ttk以及第一部分总结………………………72

第二部分:tkinter界面应用程序

第零节:实战的说明………………………………………75

第一节:贪吃蛇……………………………………………77

第二节:记事本……………………………………………85

第三节:屏保程序…………………………………………94

2 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第四节:简易通讯录………………………………………98

第五节:本部分总结………………………………………103

3 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

前言

*******************界面编程*************

1.如果读者有过C++或者C#或者VB等语言的编程经验,甚至是咱们自己国家的易语言,它们都有一些可以通过拖拽的方式来编辑界面的工具。

2.但是很可惜,在Python里面这种工具并不多,这也是和Python是一个脚本语言有关。

3.要说tkinter,先说tk,它原本是Tcl编程语言的界面库,后来开发出了Python接口,Tkinter在Python2和Python3中的变化较大,在Python2中叫做Tkinter,在Python3中叫做tkinter,而且在导入类库的时候也有些许的变化,请读者稍加注意。

***********************定位*************

1.虽然我很喜欢Python,而且我认为掌握一门Python的界面编程也很有意思,虽然很多企业级的应用并不太会用它去写,但是它确实是很方便。

2.有时候我们需要一些界面程序,但是又不想用那些庞大而繁杂的类库的时候,tkinter的优势就显现出来了,那就是简洁简单。

3.我感觉tkinter是一个还不错的界面库,但是我感觉Python并不是特别擅长编写界面应用,而且我感觉比如wxPython或者pyQt等更胜一筹,因此也就没有对它投入太多的精力,会在后面的版本中有所加强。

******************呼吁************

1.我想开源运动已经被广为所知了,但是,我还没听到类似于大家共同打造一个完美教程的活动出现,因此,我在此呼吁大家可以团结起来,众人拾柴火焰高,来打造一个更加完美的教程。

4 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

2.这样的教程必然可以集众人之所长,使得它更具有可读性和可用性。

3.本教程虽然是辛星所写,版权归本人所有,其他人可以随意交换、印刷、传阅等等。

************版本*************************

1.该版本是2014年度辛星Python界面编程tkinter第二版,关于第一版大家可以去网上搜索,只有28页,介绍了tkinter的大致框架。

2.关于后续版本,肯定会更加完善,期待您的关注。

5 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第一部分:tkinter基础知识

第零节:认识tkinter

**************从文件夹来寻找该模块***************

r读的时候,T和K分别发音,inter单独发音,即读音如下“tea-key-inter”。

2.该模块在我们安装python的时候一起被安装了,比如我的安装目录是:C:Python32,则进入该目录,可以发现有不少的Tkinter的影子。

3.在DLLs子目录下,可以看到如下动态链接库文件,截图如下(注意是与该模块直接相关的):

4.在Lib子目录下,我们可以看到一个名为tkinter的子文件夹,截图如下:

6 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

5.进入该文件夹,可以看到里面的全部文件,大多数都是.py文件,还有两个文件夹,第一个是和缓存有关的,第二个是和测试有关的,剩下的都是py文件,下面是截图:

6.这些文件分别负责不同的功能,我们下面进入这个__init__.py,它有158K大小,且代码有3773行,该文件里有我们平时所频繁使用的绝大多数类,如果以后大家有什么新问题,可以通过阅读该文件来得到答案,因为源代 7 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

码都给我们了,掌握了源代码就是掌握了第一手资料,解决问题会更加方便一些,但是,这个源代码并还不是真正意义上的第一手资料,随着学习的深入,大家会知道原因。该文件截图如下:

7.其实在我们的安装模块中,还有一些其他的东西有着tkinter的影子,我就不一一介绍了。

***********如何得到帮助*************

1.第一点,我们上面说了,可以去源代码中一探究竟,比如该类有哪些方法,这些方法都是什么意思,可以去源代码中查看。

2.使用help方法,如果阅读源代码解决不了的问题,help应该也意义不大。

8 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

3.从互联网得到帮助,这个渠道就多了,比如搜索引擎,贴吧,论坛,QQ群什么的都可以。

*************Tkinter简介 **************

1.提到Tkinter,不得不提一下GUI,GUI即graphical

user interface,即图形界面用户接口,是相对于我们学习绝大多数编程语言所接触到的“控制台”的那个黑乎乎的命令行所区分的编程模式。

r是Tk的Python接口,而Tk原本是Tcl的GUI库,Tcl是一门语言,具体我就不多说了。

********Tkinter的优点和缺点***************

1.简单易学,相对于其他的比如PyGtk,PyQt等等,它确实太简单了,简单到了一定程度,甚至给人一种小儿科的感觉。

2.可以使用少量的代码产生功能强大的GUI界面,这一点是相对于C++等语言来说的,这也是绝大多数脚本语言令人自豪的地方。

3.跨平台,其实这一点,对于很多个人来说意义不大,甚至对于很多公司来说意义也不大,很多公司会为了很多平台单独开发的,这一点也可能会涉及到“跨平台同时也会丧失平台优势”等问题的思考。

4.内置与Python里面的,这一点,不需要我们单独去安装,是方便了很多,也是一个Python里面的标准。

5.缺点就是功能过于简单,对于一些很大型的应用,使用tkinter,我感觉这个框架提供的功能还是太少了,很多功能还是需要我们去做。

9 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

6.还有一个缺点是相对于C++来说的,它的效率问题还是不算太高,对于一些对画面要求很高的,我还是有点担心它不能胜任。

************起航之前的测试**************

1.在我们编程之前,先开始一个小测试把,它只需要两行代码。

2.我们在IDLE中书写两行,第一行是导入tkinter这个模块,注意大小写,因为Python是区分大小写的,第二行是使用一个测试函数。

3.截图如下:

4.运行效果截图:

5.说明:如果点击上面的按钮,则按钮的名字会在两边不断的增加中括号,而点击下面的quit按钮,则退出程序。

10 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第一节:开始第一个tkinter程序

*************前言交代***************

1.至于用什么书写python代码,每个人都有各自的爱好,有人喜欢用IDLE,不管你用什么,我这里的示例全部采用Sublime。

2.有些特别简单的例子,我也会在IDLE中展示。

**********第一个程序****************

1.我们新建一个无格式的文本文件,通常是.txt文件,然后修改名称为,然后写三行代码。

2.这三行代码的截图如下:

3.然后保存,双击该py文件,如果操作系统不知道该如何打开该文件,那么它会提示用计算机上的其他程序打开,我们找到我们Python安装目录下的,用它打开即可,运行效果如下:

11 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

4.此时后面有个黑乎乎的控制台窗口,如果我们想双击之后直接看到我们创建的这个窗口,而不像看到这个命令行窗口,那么可以把修改后缀名为,并且用Python安装目录下的打开即可,修改后的示意:

12 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

*********代码解读*****************

1.我不知道大家的Python基础怎么样,代码的第一行是引入了该模块,即from tkinter import * 所做的工作。

2.第二行是对Tk这个类进行实例化,即root是它的一个实例,是代码root = Tk()的作用。

3.第三行进行事件循环,即op()的作用,关于事件循环,我们后面会解释。

***************Tk类解读**************

1.官方对于该类的描述是“代表绝大多数应用程序主窗口的高层空间,它会和一个Tcl解释器相关联”,它继承自两个类,一个是Misc,另一个是Wm,我们这里使用的mianloop方法,就是从Misc里面继承来的。

2.对于Tk,我们这么理解,就把它当做一个tkinter程序的所有窗口的老大即可,即所有的部件都需要先创建它。

3.我们可以通过第零节介绍的方法阅读这两个类的源代码来得到一些信息,我是随便读了读Wm的源代码,发现了一个方法,可以修改这个窗口的标题,即wm_title方法,下面我用这个方法修改这个窗口的标题。

4.代码如下:

5.窗口效果如下:

13 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

14 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第二节:认识新组件---标签

***********组件**************

1.如果大家习惯了windows编程,那么对于“控件”一次一定不会陌生,其实呢,组件和控件是一回事,在本书中我们不加以区分。

2.组件的英文表述是“widget”,我们常见的按钮,文本框等等都可以当做组件。

3.我们可以为一个窗口增加若干组件来丰富该窗口的功能,我们往往需要指定这个组件的大小和位置,我们还需要通过编程的方式来指定该组件能完成什么功能。

**********标签空间*****************

1.所谓“标签”,就是贴在物品前面的一个简短的说明,它用于说明一些文字信息。

2.标签可以说是最简单的窗口组件了,它不需要执行任何功能,只是用来显示信息。

************增加一个Label***************

1.下面是代码示例:

2.下面是运行效果截图:

15 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

****************代码分析**************

1.这里的Label是一个类,可以在__init__.py文件里查看相应的源代码。

2.w1是一个Label的实例,它有一个text属性,用来指定它的文本内容。

3.该类的源代码也非常简单,它的源代码截图:

4.大家可以看到它的标准属性,比如有background,font,bitmap,padx,relief等等,underline等等。

16 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

5.该类有个pack方法,没错,这个pack方法我们后面会讲,大家可以理解为它的作用就是找个合适的位置进行放置即可,即pack之后就选定位置放上去了。

6.这里的初始化的时候,需要先指定root,是说w1这个组件是在root这个窗口的,不是属于别的窗口的,以后我们有了多窗口的应用程序,不会混淆。

******Widget类*****************

1.我们上面发现,Label类是继承自Widget类的,并且自己只有一个方法,就是用来初始化自身的,那么要想彻底理解Label,就必须彻底理解Widget。

2.我们找到了Widget的代码,发现它更加短小,甚至连个方法都没有,下面是Widget的截图:

3.通过这个注释,我们可以理解如下:它是一个可以指定位置并且可以使用pack,place和grid来布局管理的窗口组件。

4.然后我们找到BaseWidget,发现它的代码也很短小,代码截图如下:

5.该类继承自Misc,包含了四个函数,函数的功能通过名字就可以知道了。

17 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

6.对于Misc,我们后面会解读。

***********总结****************

1.我们这一节学习了Label这个组件,它的创建使用Label这个类,实例化的时候首先要指定它的父窗口,然后就是用字典的方式设置自己的一些特征,这些特征上面都列出了,但是没有实例演示。

2.然后使用pack方法布局上去,关于布局,我们后面会详细讲,这里我们统一使用pack就可以了。

**************多标签的应用程序***************

1.如果我们想要多个标签,该怎么办呢?

2.很简单,只需要声明多个标签的实例,然后分别pack到窗口上即可。

3.下面是使用了三个标签的代码截图:

4.效果截图:

18 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

19 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第三节:组件讲解以及按钮

*************tkinter的核心组件************

1.在Python的tkinter中,有21个核心组件,它们提供了最基本的功能,虽然简单,因为使用频率较高,因此特别重要。

2.这21个核心组件是:Toplevel、Label、Button、Canvas、Checkbutton、Entry、Frame、LabelFrame、Listbox、Menu、Menubutton、Message、OptionMenu、PaneWindow、Radiobutton、Scale、Scrollbar、Spinbox、Text、Bitmap、Image。

************组件的使用***********

1.各个组件都有相应的类,我们可以通过面向对象的方式去使用它们。

2.这些组件的使用也很相似,在实例化这些组件的时候,第一个参数都是父窗口或者父组件,后面跟着的就是该组件的一些属性,比如上面我们学到的Label的text属性和background属性。

3.多个组件的位置控制方式也很相似,我们可以用pack方法来进行简单的布局,具体的个例我们后面再说。

4.组件也会有些方法是共用的,比如configure方法来设置属性等等。

****************按钮****************

1.按钮也是非常重要的组件,在我的第一版教程的时候,就特别重视它,没错,按钮的重要性在于它可以执行相应的功能。

2.按钮的英文表述是“button”,它随处可见,当我们单击的时候,它可以执行相应的功能。

20 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

3.按钮在tkinter中有一个类专门负责它,叫做“Button”,该类也非常简短。

4.该类的截图一:

5.该类的截图二:

21 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

*************按钮与功能的绑定**************

1.上文说到,按钮可以执行相应的功能,这里的功能我们可以理解为一个函数,或者这些功能通过相应的函数去实现。

2.绑定方式通常有如下几种:第一种,在按钮组件被声明的时候用command属性声明,command属性接受一个函数名,注意函数名不要加双引号。第二种,使用bind方法,该方法是Misc这个类的一个方法,下面我们仔细讲解。

*********第一种方法绑定事件**************

1.我们要完成的功能是我们按下这个按钮的时候,就会在窗口上增加一个Label,它显示“我爱python”。

2.代码示例:

22 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

3.功能说明(一开始是只有一个按钮的,我点击一下,就会在这个窗口上多一个标签,下面是我点击了三次之后的截图):

************第一种方式代码解读*************

1.其实很简单,这里只需要注意command属性后面不要加任何的标点符号。

2.这里的xinlabel函数中,使用了全局的xin变量,需要注意。

***********第二种方式绑定事件***************

23 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

1.下面使用第二种方式来绑定事件,这个事件完成同样的功能。

2.代码截图:

3.效果截图我就不发了,和上面的一样。

***********bind解读*********************

1.大家可能对bind充满了好奇,如果大家读读源代码,会发现这个方法是在Misc类中的。

可以接受三个参数,但是本例中我们只传递了两个参数。

的第一个参数是事件类型,它采用的描述方式是这样的:,这里的MODIFIER即修饰符,它的全部取值如下:Control, Mod2,

M2, Shift, Mod3, M3, Lock, Mod4, M4, Button1, B1,

Mod5, M5 Button2, B2, Meta, M, Button3,B3, Alt,

Button4, B4, Double, Button5, B5 Triple, Mod1, M1。而第三个TYPE表示类型,它的全部取值如下:Activate,

Enter, Map, ButtonPress, Button, Expose, Motion,

24 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

ButtonRelease,FocusIn, MouseWheel, Circulate,

FocusOut, Property, Colormap, Gravity Reparent,

Configure, KeyPress, Key, Unmap, Deactivate,

KeyRelease Visibility, Destroy,Leave。第三个参数表示细节,其实也就是对第二个参数的一些辅助说明。

4.第一个参数可能对刚使用它的人来说有点太复杂了,常见的鼠标左键单击如下:,也就是我上面的代码中用到的。

5.第二个参数可以是一个函数名,记住,不要加任何的标点符号,否则运行时会报错的。

*************说明************

1.使用bind函数的时候,第二个参数是一个函数名,该函数必须接受一个参数,即表示该事件。

2.我通常习惯用event来表示,如果我们调用的函数不接受任何参数,则会报错如下:TypeError: xinlabel()

takes no arguments (1 given)。

***********设置属性*****************

1.下面我们可以设置一些属性,这些东西的学习不用过于心急,随着我的大量的代码示例,大家会接触不少的。

2.比如我们可以设置背景色,这里直接设置属性,代码截图:

25 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

3.界面效果展示:

*************总结***************

1.关于按钮,我们重点理解的就是它如何和事件进行绑定的。

2.当然一些其他属性用来美化按钮也很重要。

26 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第四节:布局的讲解

************布局的重要性****************

1.我想,对于任何一门界面编程来说,布局都是非常重要的一关,它的英文翻译叫做“layout”。

2.记得以前学习Java的Swing,里面有布局的类,学习Qt,也有布局的相关知识,貌似MFC里面的布局印象不深了,也是好久不用的缘故 ,好了,回到Python的tkinter,我刻意把它提到前面来介绍。

************tkinter的布局****************

1.其实我们已经接触过tkinter的一种布局,就是pack布局,它非常简单,我们不用做过多的设置,直接使用一个pack函数就可以了。

布局:grid可以理解为网格,或者表格,它可以把界面设置为几行几列的网格,我们在网格里插入我们想要的元素。这种布局的好处是不管我们如何拖动窗口,相对位置是不会变化的,而且这种布局也超简单。

布局:它直接使用死板的位置坐标来布局,这样做的最大的问题在于当我们向窗口添加一个新部件的时候,又得重新测一遍数据,且我们不能随便地变大或者缩小窗口,否则,可能会导致混乱。

**************pack布局*************

1.我们使用pack函数的时候,默认先使用的放到上面,然后 依次向下排,它会给我们的组件一个自认为合适的位置和大小,这是默认方式,也是我们上面一直采用的方式。

2. pack函数也可以接受几个参数,side参数指定了它停靠在哪个方向,可以为LEFT,TOP,RIGHT,BOTTOM,分别代表左,上,右,下,它的fill参数可以是X,Y,BOTH和NONE, 27 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

即在水平方向填充,竖直方向填充,水平和竖直方向填充和不填充。

3.它的expand参数可以是YES和NO,它的anchor参数可以是N,E,S,W(这里的NESW分别表示北东南西,这里分别表示上右下左)以及他们的组合或者是CENTER(表示中间)。

4.它的ipadx表示的是内边距的x方向,它的ipady表示的是内边距的y方向,padx表示的是外边距的x方向,pady表示的是外边距的y方向。

************pack的布局实例************

1.根据上面的介绍,我们可以做出如下布局的样子:

2.按理说做的这么复杂本身没什么意思,只是想让大家看一下其实pack也可以完成相对复杂的布局,它的源代码如下:

28 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

**************grid布局*************

1.由于我们的程序大多数都是矩形,因此特别适合于网格布局,也就是grid布局。

2.使用grid布局的时候,我们使用grid函数,在里面指定两个参数,用row表示行,用column表示列,其中值得注意的是row和column的编号都从0开始。

函数还有个sticky参数,它可以用N,E,S,W表示上右下左,它决定了这个组件是从哪个方向开始的,下面的例子可以很好的解释这一点。

布局直接用后面的行和列的数字来指定了它位于哪个位置,而不必使用其他参数。

函数也支持诸如ipadx,ipady,padx,pady,它们的意思和pack函数是一样的,默认边距是0。

6.它还支持参数比如rowspan,表示跨越的行数,columnspan表示跨越的列数。

7.它还有一些属性,可以在以后我们的demo中慢慢使用来看出其重要性。

**************账号登陆例子的截图*********

29 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

1.界面截图:

2.代码截图:

3.代码说明:由于代码过于简单,就直接在这里说了,Entry表示“输入框”。

************place布局***************

1.关于place布局,可能是最有东西好讲的,但是,也是我最不愿意讲的。

2.它使用place函数,它分为绝对布局和相对布局,绝对布局使用x和y参数,相对布局使用relx,rely,relheight和relwidth参数。

3.由于该方法我极度不推荐大家用,因此也就不继续说了。

***************总结**************

30 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

1.由于place我不推荐大家用,也就pack和grid布局好一些。

2.但是pack和grid不能同时用,通常对于较为复杂点的,我还是建议大家用gird。

31 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第五节:事件

*************事件*************

1.如果大家学习过Windows编程,经常会听到“Windows是基于消息的”,而绝大多数界面编程也都会涉及到“事件”。

2.我们的很多操作,比如我们点击了一下鼠标,这就是一个事件,而操作系统会根据我们的相应的事件产生相应的消息,操作系统把消息传递给我们的应用程序,然后我们的应用程序根据操作系统传入的数据执行相应的命令。

3.事件是我们触发的,消息是操作系统根据我们的事件产生的,我们通常对于“消息”并不多关注,我们重视的是“事件”。

4.事件的英文表述是“event”。

**********事件及其绑定**************

1.其实,我们在按钮那一节就接触到了事件的绑定,使用的函数是bind。

函数的调用规则:

窗体对象.bind(事件类型,回调函数)

3.所谓的“回调函数”,就是这个函数我们不用去调用它,当相应的事件发生的时候,它会自动取调用。比如当我们的按钮被按下的时候,它会被自动调用。

***************常用的事件************

1.我们在使用bind函数的时候,它的第一个参数就是事件的类型了。

2.表示鼠标左键单击,其中的1换成3表示右键被单击,为2的时候表示鼠标中键,感觉不算常用。

32 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

3.表示A键被按下,其中的A可以换成其他的键位。

4.表示按下的是Ctrl和V键,V可以换成其他键位。

5.表示按下的是F1键,对于Fn系列的,都可以随便换。

***************再看绑定*************

1.事件不仅可以与Button绑定,我们之前看过源代码,发现bind函数是定义在Misc类里面的,也就是说,这个bind可以被绝大多数组件类所使用。

2.也就是说,我们可以让“标签”来模拟“按钮”的作用。

3.因为标签是Label类,而Label类继承自Widget,而Widget继承自BaseWidget,而Basewidget继承自Misc。

4.其实不仅是标签可以模拟button,任何组件都可以模拟它,只是那么有用。

********标签模拟按钮*************

1.代码截图:

33 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

2.运行效果(下面是我点击了几次之后的效果图):

************关于bind函数*************

1.关于bind函数,还有两个版本的,不能说高级低级,只是使用的方面不同。

34 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

2.可以在全程序级别的绑定,使用bind_all,它的参数类型和bind一样,它通常用于全局的快捷键,比如F1通常是用来打开帮助文档。

3.还可以绑定某些类别,使用bind_class,它接受三个参数,第一个参数是类名,第二个参数是事件类型,第三个参数是相应的操作,比如_class(“Entry”,“”,my_paste)。它就是绑定了所有的所有的输入框的Ctrl+V表示粘贴。

*************解除绑定**************

1.接触绑定我们使用unbind方法,它和bind的使用很相似。

2.不过unbind方法只需要一个参数就可以了,它只需要解除绑定的事件类型,因为它会解除该绑定事件类型的所有回调函数。

*********总结**************

1.事件是一个非常重要的环节,但是真正要我写的时候,又开始有点不知道该写什么了,也许是写的经验太少,导致了有时候有点无头绪。

2.后续版本肯定会做的更好,期待您的关注。

35 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第六节:输入框以及一个登录程序

**************输入框的重要性***************

1.上面我们介绍了标签与按钮,下面我认为还比较重要点的就是输入框。

2.应用程序要取得用户的信息,输入框是必不可少的,虽然执行命令可以使用按钮,但是总不能让用户一直点击按钮把。

**************Entry************

1.输入框是Entry,可以阅读它的源代码。

2.源代码截图:

3.我看了一遍,感觉比较重要的也就一个get函数,其他函数倒也不是没用,而是感觉不常用。

36 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

函数使用的时候不需要任何参数,它的返回值就是该输入框的内容。

****************密码框***********

1.其实密码框和输入框基本是一样的,都是向里面输入信息用的。

2.如果要说不一样,也就一个地方不一样:密码框需要输入的信息的显示字符比较单一。

3.比如e是一个输入框,我们可以设置它的show属性让它变成一个密码框,即e[‘show’] = ‘*’就可以了。

*********小型登录程序*************

1.下面是一个小型登录程序,它的用户名是111,密码是222,如果输入正确,那么点击“登录”按钮之后,就会显示“登录成功”,如果输入不符合,那么就会显示“用户名或者密码错误”,并且清空两个输入框。

2.效果截图一(这里输入的用户名和密码分别为111和222):

3.效果截图二(这里胡乱输入用户名和密码):

37 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

4.代码截图一:

5.代码截图二:

38 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

39 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

第七节:菜单

************菜单简介*****************

1.菜单的信息量是非常巨大的,由于菜单又可以有子菜单,因此菜单的信息量非常大。

2.菜单的分类也较多,通常可以分为下拉菜单、弹出菜单等等。

**************添加顶层菜单************

1.我们可以使用Menu类来新建一个菜单,Menu和其他的组件一样,第一个是parent,这里通常可以为窗口。

2.然后我们可以用add_commmand方法来为它添加菜单项,如果该菜单是顶层菜单,则添加的菜单项依次向右添加。如果该菜单时顶层菜单的一个菜单项,则它添加的是下拉菜单的菜单项。

_command中的参数常用的有label属性,用来指定的是菜单项的名称,command属性用来指定被点击的时候调用的方法,acceletor属性指定的是快捷键,underline属性是是否拥有下划线。

3.最后可以用窗口的menu属性指定我们使用哪一个作为它的顶层菜单。

*****************代码实战************

1.这里只是做出了顶级菜单,它们四个是并列的一行,并没有实现什么功能,效果图如下:

40 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

2.下面是代码截图:

3.可以看到,非常简单的方式,我们使用add_command来添加菜单项即可。

************有子菜单的情况*************

41 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

1.如果有子菜单,则情况稍微复杂点,这个时候,我们需要使用add_cascade,cascade可以理解为“级联”,即它的作用只是为了引出后面的菜单。

_cascade的一个很重要的属性就是menu属性,它指明了要把那个菜单级联到该菜单项上,当然,还必不可少的就是label属性,用于指定该菜单项的名称。

3.我们先新建一个Menu的实例,然后使用add_command来添加菜单项,这样等该菜单建立完毕,我们要把它作为另一个菜单项的子菜单,就需要使用add_cascade方法。

************代码实战***********

1.下面我们使用了下拉菜单,这也是我们通常使用的菜单形式,即一行菜单项,点击之后会产生一个下拉菜单。

2.效果截图一:

3.截图效果二:

42 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

4.截图效果三:

5.代码截图:

43 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

6.具体我就不多说了,感觉所有要说的都在上面的解释中了,这里要注意的是我们可以先把子菜单做好,然后再去做上层菜单。

************弹出菜单*****************

1.弹出菜单又叫“上下文菜单”,也叫“右键菜单”,它通常是鼠标单击右键产生的菜单,因此会有“右键菜单”的说法。

44 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

2.其实很多界面库里面都是给出了弹出菜单的简单的制作方法的,但是tkinter里面我们却只能使用比较原始的事件绑定的方式去做。

3.大体思路就是:我们先新建一个菜单,然后向菜单项中添加各种功能,最后我们监听鼠标右键消息,如果是鼠标右键被单击,此时可以根据需要判断下鼠标位置来确定是哪个弹出菜单被弹出,然后使用Menu类的pop方法来弹出菜单。

4.大体思路就是如此,至于具体的细节,让我们到代码实战中一探究竟。

************提前说明*************

类里面有一个post方法,它接收两个参数,即x和y坐标,它会在相应的位置弹出菜单。

2.还记得用bind方法来绑定事件吗?而且要记得鼠标右键是用的

************弹出式菜单实战*************

1.界面效果(该右键菜单中如果点击python选项,则会新建一个标签,标签内容是“I love python”):

45 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

2.代码截图:

3.此处利用了Menu的post方法,还有bind方法,一定要记住鼠标右键的事件名称,这些用多了之后自然能记住。

************分割线*******************

1.有时候,一个菜单项的各个菜单可能并不是一个类型,有可能是两种类型,在它们中间可以插一个分割线来界定界限。

2.插入分割线和插入正常的菜单项操作很相似,只是使用的方法是add_separator,该方法无需参数。

3.插入分割线效果示例(在ruby下面插入了一个分割线):

46 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

4.插入分割线代码示例:

**************checkbutton与radiobutton********

utton原本是指“复选按钮”,radiobutton原本是指“单选按钮”。

47 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

2.单选按钮与复选按钮是相对来说的,即在这一组中,单选按钮中只能有一个是被选定的,即一个人的性别是女的,就一定不是男的,但是复选按钮对应的情况则是可以有多个同时被选定,比如一个人即可以喜欢篮球,也可以喜欢足球,还有可能喜欢乒乓球,等等。

3.在菜单中,也有类似的概念,即单选菜单和复选菜单。它们分别用add_radiobutton和add_checkbutton来分别添加。

4.这两种菜单都是如果一旦被选定,那么前面会有一个类似于对号的标记出现,checkbutton可以多个同时被选定,但是radiobutton却只能被选定一个,即这个被选定了,会自动取消前一个的选定。

************代码与效果截图***************

1.效果图(上面是可以复选的,下面则是必须单选):

2.代码截图:

48 / 103

辛星 2014年度辛星tkinter教程第二版 tkinter

3.我想发上来代码,就所有的一切不言自明了,基本不用介绍其他了。

4.这个在做选择的时候比较有用,但是需要添加菜单的执行才有用,即给菜单的command属性赋值相应的函数才有用,否则只是给人看的空架子,不过鉴于前面也写了不少了,我想这一点应该很简单就能办到。

***********菜单总结*************

1.关于菜单,我暂时就介绍到这里了,在以后的版本中可能会增加一些内容。

2.下面我把tkinter中的Menu类截图给大家把。

类截图一:

49 / 103

辛星tkinter教程第二版

本文发布于:2024-02-03 13:56:40,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170693980050556.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:易语言赚钱
标签:使用   菜单   函数
留言与评论(共有 0 条评论)
   
验证码:
排行榜

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23