Python Tkinter GUI编程入门介绍


Posted in Python onMarch 10, 2015

一、Tkinter介绍

Tkinter是一个python模块,是一个调用Tcl/Tk的接口,它是一个跨平台的脚本图形界面接口。Tkinter不是唯一的python图形编程接口,但是是其中比较流行的一个。最大的特点是跨平台,缺点是性能不太好,执行速度慢。
一般使用Tkinter的方法是:
From Tkinter import *
或者: import Tkinter 两者的区别我们前面讲模块的时候已经说过了。
 
二、Tkinter的使用

先看一下GUI程序的开发,熟悉MFC的朋友应该不会陌生。在GUI程序中,我们会有一个顶层窗口,在这个顶层窗口上可以包括所有的小窗口对象,像标签,按钮,列表框等等,也就是说顶层窗口时我们放置其他窗口或者控件的地方。我们用下面的语句可以创建一个顶层窗口,或者叫根窗口:

Import Tkinter

top = Tkinter.Tk()

(如果前面是用的from Tkinter import * ,那么Tk()就够了)
然后我们就可以在这个根窗口上设置“组件”了。通常这些组件会有一些相应的行为,比如鼠标点击,按下等等,这些称为事件,而程序会根据这些时间采取相应的反应,称为回调。这个过程成为事件驱动。
所有的创建和放置完毕后,就立刻进入主循环,代码如下:
Tkinter.mainloop( )

Tk的组件有很多,不可能一一介绍,通过一个小例子看看其中一个标签的使用吧。
>>> import Tkinter

>>> top = Tkinter.Tk()

>>> label = Tkinter.Label(top,text='Hello World')

>>> label.pack()

>>> Tkinter.mainloop()

运行结果就是
 
下面解释一下:

第一行,是导入模块。
第二行,创建主窗口。
第三行,创建label标签,它是有Tkinter的一个方法Label来实现的,关于Label的帮助可以help一下。
第四行,pack()是用来管理和显示组件的,它的参数我们以后再说。
第五行,mainloop()进入主循环。剩下的事就系统的了。
 
下面看看组件的配置。Tk中的每一个组件都有很多option,通过改变这些option可以改变组件的外观,比如显示的内容,颜色,大小,位置,事件处理函数等。

比如: w=label(root,text='hello',fg='red')

创建一个w,第一个参数时他的master widget,是root,所有参数都有默认的。我们可以用默认的来创建,w.cget(option)得到一个option的值。同样可以用w.config(option='')来设置某个参数的值。

三、Tkinter的几何管理器

熟悉GUI编程的人知道,放好每个组件的是很繁琐的,不仅要调整自身大小,还要
整和其他组件的相对位置。Tk提供了三个管理器来帮助我们:Pack  Grid  Place
1、pack
Pack使用很简单,就是w.pack(option)。常用的option有:
Side 表示把组件放到哪一边,TOP(上),BOTTOM(下),LEFT,RIGHT
Padx和pady  表示parcel的每一个边和组件的预留空间。
Ipadx和ipady,表示组件的每一个边和他包含的内容之间的预留空间。
Anchor表示在parcel放置组件的方式,缺省时CENTER。
2、grid
使用方法和pack类似。
3、place
精确的摆放一个组件的位置,一般不太用。
 
关于这个三个的详细使用和算法可以参考相关资料。
 
下面看最后一个例子:

Python Tkinter GUI编程入门介绍

先看一下结果。

Python Tkinter GUI编程入门介绍

通过拖动进度条而改变文字大小

Python Tkinter GUI编程入门介绍

看一下代码:

from Tkinter import *  #引入模块

#resize函数是用来改变文字大小的,当进度条改变时调用

def resize(ev=None):

label.config(font='Helvetica -%d bold' % scale.get())

#config函数就是通过设置组件的参数来改变组件的,这里改变的是font字体大小

top=Tk()   #主窗口

top.geometry('600x400')  #设置了主窗口的初始大小600x400

label=Label(top,text='Hello world!',font='Helvetica -12 bold')  #设置标签字体的初始大小

label.pack(fill=Y,expand=1)

#scale创建进度条,设置

scale=Scale(top,from_=10,to=40,orient=HORIZONTAL,command=resize)

scale.set(12)  #设置起始位置

scale.pack(fill=X,expand=1)

quit = Button(top,text='QUIT',command=top.quit,activeforeground='white',

activebackground='red')

quit.pack()

mainloop()
Python 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
python利用正则表达式排除集合中字符的功能示例
Oct 10 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
python中for循环输出列表索引与对应的值方法
Nov 07 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Python图像处理模块ndimage用法实例分析
Sep 05 Python
python 安装impala包步骤
Mar 28 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
粗暴解决CUDA out of memory的问题
May 22 Python
Python实现批量将文件复制到新的目录中再修改名称
Apr 12 Python
Python格式化css文件的方法
Mar 10 #Python
Python将xml和xsl转换为html的方法
Mar 10 #Python
Python写的Tkinter程序屏幕居中方法
Mar 10 #Python
Python生成随机密码
Mar 10 #Python
Python获取单个程序CPU使用情况趋势图
Mar 10 #Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 #Python
使用graphics.py实现2048小游戏
Mar 10 #Python
You might like
9个PHP开发常用功能函数小结
2011/07/15 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
2015/08/18 PHP
PHP中include/require/include_once/require_once使用心得
2016/08/28 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
一个简单的jQuery插件制作 学习过程及实例
2010/04/25 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
js的2种继承方式详解
2014/03/04 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
Bootstrap导航条可点击和鼠标悬停显示下拉菜单的实现代码
2016/06/23 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
利用Python批量生成任意尺寸的图片
2016/08/29 Python
python版简单工厂模式
2017/10/16 Python
python生成器,可迭代对象,迭代器区别和联系
2018/02/04 Python
Python处理CSV与List的转换方法
2018/04/19 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
关联、聚合(Aggregation)以及组合(Composition)的区别
2012/02/29 面试题
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
初二数学教学反思
2016/02/17 职场文书