03.05 木辛老师重新启程,带着大家一起免费学习Python开发新技能


木辛老师今天给大家带来了有可能是Python自带库中最轻量级的扩展。你有没有兴趣看看?


请点击右上角“关注”按钮关注我们哟:跟着木辛老师学习Python编程知识,变身快乐的编程达人吧~


欢迎来到木辛老师的Python和Tkinter编程课堂。从今天开始,木辛老师会不定期发出有关Tkinter的图文学习课程,欢迎大家收看。


在这个个图文课程系列中,我们会给大家讲解如何使用Tkinter库,并通过几个小例子深入了解这个简单、但是功能强大的“玩具”。

使用Tkinter库并不需要安装,因为在大多数的情况下,如果你已经成功的安装了Python,那么就可以直接使用Tkinter了。

所以,使用Tkinter库可以快速的完成图形化应用的开发,同时你也可以将它分享给别人,和他们一起享受Tkinter带来的快乐吧。


木辛老师重新启程,带着大家一起免费学习Python开发新技能


启程

那让我们开始吧。


在正式开始之前,木辛老师需要声明一下:本系列内容采用的是Python3.7.4版本。


木辛老师重新启程,带着大家一起免费学习Python开发新技能


如果你正在使用Python2.x的版本,请注意他们中间的区别。

所以,在我们的课程里,导入Tkinter,使用的是:

<code>import tkinter。/<code>

而,如果是用Python2.x的同学,导入Tkinter会这么写:

<code>import Tkinter 。/<code>


现在,你可以打开本地的IDLE工具(如何还没有安装好Python和IDLE,请移步木辛老师关于Python安装的教程。)

然后输入如下指令:

<code>>>> import tkinter/<code>
<code>>>> tkinter.TkVersion/<code>
<code>8.6/<code>
<code>>>>/<code>


这两天命令的作用一共有两个:

(1)检测一下本地Tkinter是否正常

(2)得到Tkinter的版本,(不同版本之间可能会有细微的差别,如果碰到木辛老师会给大家提醒的)


木辛老师重新启程,带着大家一起免费学习Python开发新技能


丰富的Tkinter结构

Tkinter库包含很多类,这些类被称为组件。

组件是用来做什么用的呢?

是应用程序图形化部分的组成部分,包括主窗口、按钮、菜单、对话框等等。


木辛老师重新启程,带着大家一起免费学习Python开发新技能


每一个应用程序都需要一个主窗口,是用户认识软件,操作软件的主要对象。有了它,用户才能开始了解当前这个软件。主窗口是一个应用程序最为重要的部分。

所以,使用Tkinter库的时候,它会自动为你创建一个空白的主窗口,之后任由你来粉饰,而完成这一切的背后是一个叫做TK的“东东”,它可以说是整个库的灵魂。


TK控件包含很多窗口的属性,比如说应用程序中顶部某个按钮的文本、应用程序窗口尺寸、窗口位置、是否可以改变窗口大小等等。


鉴于TK拥有这么些个“吸引人”的属性,很多程序员们喜欢直接创建TK的子类,然后作为其程序的主类使用。纵观很多使用Tkinter的程序员的代码,针对这个特殊的情况,你可以发现很多有趣的事情,比如起名字。

有的喜欢叫他Root,有的喜欢叫他App,还有的会根据当前控件的用途起名,比如商品列表的话,会叫它ShoppingList。这个完全依照大家的习惯,关键是喜欢Tkinter就好。


好了,咱们继续!

有了主窗口,接着就需要一些子控件填充一下。

大家一定要注意,多有的子控件都是必须依附主窗口的,如果主窗口隐藏起来了,那么这些子控件也就看不到了;如果主窗口移动到了其他位置,那么这些子控件也会跟着移动。

既然需要依附,是不是得有个管理他们的机制呢?


木辛老师重新启程,带着大家一起免费学习Python开发新技能


非常正确,子控件如果想要成功依附到主窗口中,需要遵循主窗口的“规矩”:Geometry manager。

木辛老师也不知道具体这个怎么翻译,再其他语言里有称呼它布局管理器的,简单来讲,就是用来管理如何将子控件放到主窗口中的。

比如位置,尺寸(是否跟随父容器变化)等等。通过这种机制,子控件在主窗口中很是和睦呢!


规矩

Tkinter中一共存在3种:

(1)pack

(2)grid

(3)place

这三个概念就更不能翻译了,否则在编程中就会被理解的物是人非了。

大家需要记得他们的原本的名字!这样的话也有助于大家理解这几种概念。

这三个概念也非常简单,大家也可以理解为他们是控件放置的三种方式吧。


pack

这是一种“占空”放置方式,可以通过指定控件放到父控件的哪个位置来决定该控件的所在,属性包含:上、下、左、右。对应的语句可以这么写:

<code>tk.Label(window, text='P', fg='red').pack(side='top')    # 上 /<code>
<code>tk.Label(window, text='P', fg='red').pack(side='bottom') # 下 /<code>
<code>tk.Label(window, text='P', fg='red').pack(side='left')   # 左 /<code>
<code>tk.Label(window, text='P', fg='red').pack(side='right')  # 右/<code>

通过参数side指定该控件的所在;另外,通过另一个参数fill指定控件的伸展方向:x代表水平方向;y代表竖直方向;而使用BOTH则代表,当前控件可以通过两个方向伸展。

最后,还有一个布尔类型的参数:expand。

这个参数控制着当前控件是否要跟随父控件变化而变化。


grid

这种放置方式可以叫做表格布局,通过指定某一个单元格,将子控件放置到父控件的某个位置,这样每个子控件占据的区域是相同的。

当然了,可以通过设置columnspan和rowspan“指使”他们侵占其他单元格。

这倒是很像电子表格软件,通过行和列的值可以唯一确定一个单元格。

当然了,grid布局方式是看不到它的边框滴。它们都在你的“心里”。

你也许会问,在很多时候,控件所占的区域特别大,但是控件特别小。

那么,这个控件具体在这块区域的哪里呢?

这个问题问的非常好!

Tkinter已经想到了解决办法了。

通过常量N、S、E和W,指定控件对齐当前区域的那条边界。N代表的是北边(上边)、S是南边(下边)、E是东边(左边)W代表的是西边(右边)。

同样的,如果你组合一下,NE就代表的是东北方向,以此类推。


place

这种方式不是太常用,因为它比较呆板。使用place方式,需要你指定具体的坐标值,而且不能自动计算动态变化后的效果。

但是,如果用到比较小的窗口应用中,比如弹出框什么的,倒是可以用一下。不过还是不建议你使用这种布局。


好吧,今天的课程就到这里了。

我们今天认识了也许是Python自带的最轻量级的GUI库,随着咱们学习的深入,你会发现,使用Tk开发一些程序还是很不多的选择的。


木辛老师重新启程,带着大家一起免费学习Python开发新技能


小朋友们不要忘记关注我们哟 ,下期课程更精彩,请大家一起期待吧~


快乐编程,快乐成长,拜拜!


分享到:


相關文章: