为Python程序添加图形化界面的教程


Posted in Python onApril 29, 2015

Python支持多种图形界面的第三方库,包括:

  •     Tk
  •     wxWidgets
  •     Qt
  •     GTK

等等。

但是Python自带的库是支持Tk的Tkinter,使用Tkinter,无需安装任何包,就可以直接使用。本章简单介绍如何使用Tkinter进行GUI编程。
Tkinter

我们来梳理一下概念:

  • 我们编写的Python代码会调用内置的Tkinter,Tkinter封装了访问Tk的接口;
  • Tk是一个图形库,支持多个操作系统,使用Tcl语言开发;
  • Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。

所以,我们的代码只需要调用Tkinter提供的接口就可以了。
第一个GUI程序

使用Tkinter十分简单,我们来编写一个GUI版本的“Hello, world!”。

第一步是导入Tkinter包的所有内容:

from Tkinter import *

第二步是从Frame派生一个Application类,这是所有Widget的父容器:

class Application(Frame):
  def __init__(self, master=None):
    Frame.__init__(self, master)
    self.pack()
    self.createWidgets()

  def createWidgets(self):
    self.helloLabel = Label(self, text='Hello, world!')
    self.helloLabel.pack()
    self.quitButton = Button(self, text='Quit', command=self.quit)
    self.quitButton.pack()

在GUI中,每个Button、Label、输入框等,都是一个Widget。Frame则是可以容纳其他Widget的Widget,所有的Widget组合起来就是一棵树。

pack()方法把Widget加入到父容器中,并实现布局。pack()是最简单的布局,grid()可以实现更复杂的布局。

在createWidgets()方法中,我们创建一个Label和一个Button,当Button被点击时,触发self.quit()使程序退出。

第三步,实例化Application,并启动消息循环:

app = Application()
# 设置窗口标题:
app.master.title('Hello World')
# 主消息循环:
app.mainloop()

GUI程序的主线程负责监听来自操作系统的消息,并依次处理每一条消息。因此,如果消息处理非常耗时,就需要在新线程中处理。

运行这个GUI程序,可以看到下面的窗口:

为Python程序添加图形化界面的教程

点击“Quit”按钮或者窗口的“x”结束程序。
输入文本

我们再对这个GUI程序改进一下,加入一个文本框,让用户可以输入文本,然后点按钮后,弹出消息对话框。

from Tkinter import *
import tkMessageBox

class Application(Frame):
  def __init__(self, master=None):
    Frame.__init__(self, master)
    self.pack()
    self.createWidgets()

  def createWidgets(self):
    self.nameInput = Entry(self)
    self.nameInput.pack()
    self.alertButton = Button(self, text='Hello', command=self.hello)
    self.alertButton.pack()

  def hello(self):
    name = self.nameInput.get() or 'world'
    tkMessageBox.showinfo('Message', 'Hello, %s' % name)

当用户点击按钮时,触发hello(),通过self.nameInput.get()获得用户输入的文本后,使用tkMessageBox.showinfo()可以弹出消息对话框。

程序运行结果如下:

为Python程序添加图形化界面的教程

小结

Python内置的Tkinter可以满足基本的GUI程序的要求,如果是非常复杂的GUI程序,建议用操作系统原生支持的语言和库来编写。

源码参考:https://github.com/michaelliao/learn-python/tree/master/gui

Python 相关文章推荐
Python脚本实现代码行数统计代码分享
Mar 10 Python
Python基于DES算法加密解密实例
Jun 03 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
python实现串口自动触发工作的示例
Jul 02 Python
简单了解python反射机制的一些知识
Jul 13 Python
python内存动态分配过程详解
Jul 15 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 Python
python3.8下载及安装步骤详解
Jan 15 Python
如何使用Pytorch搭建模型
Oct 26 Python
Python django中如何使用restful框架
Jun 23 Python
python执行get提交的方法
Apr 29 #Python
在Python中使用PIL模块处理图像的教程
Apr 29 #Python
python获得linux下所有挂载点(mount points)的方法
Apr 29 #Python
python创建和删除目录的方法
Apr 29 #Python
python访问系统环境变量的方法
Apr 29 #Python
python中迭代器(iterator)用法实例分析
Apr 29 #Python
在Python中使用HTMLParser解析HTML的教程
Apr 29 #Python
You might like
一个查看session内容的函数
2006/10/09 PHP
php读取文件内容到数组的方法
2015/03/16 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP实现根据数组某个键值大小进行排序的方法
2018/03/13 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
js中的push和join方法使用介绍
2013/10/08 Javascript
jQuery中:not选择器用法实例
2014/12/30 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
jQuery mobile 移动web(6)
2015/12/20 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
2016/12/18 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
总结js函数相关知识点
2018/02/27 Javascript
微信小程序实现折线图的示例代码
2019/06/07 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
layui表格数据重载
2019/07/27 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
Vue实现穿梭框效果
2020/09/30 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
python操作ie登陆土豆网的方法
2015/05/09 Python
Python-嵌套列表list的全面解析
2016/06/08 Python
Python 修改列表中的元素方法
2018/06/26 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
英国最大的高品质珠宝和手表专家:Goldsmiths
2017/03/11 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
Footshop法国:购买运动鞋
2020/01/19 全球购物
青春寄语大全
2014/04/09 职场文书
五四青年节演讲稿
2014/05/26 职场文书
学校领导干部民主生活会整改方案
2014/09/29 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书