为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 sys.path详细介绍
Oct 17 Python
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 Python
Python文件右键找不到IDLE打开项解决办法
Jun 08 Python
《与孩子一起学编程》python自测题
May 27 Python
在双python下设置python3为默认的方法
Oct 31 Python
调试Django时打印SQL语句的日志代码实例
Sep 12 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
Django 自定义分页器的实现代码
Nov 24 Python
python 实现图像快速替换某种颜色
Jun 04 Python
keras.utils.to_categorical和one hot格式解析
Jul 02 Python
Python如何将装饰器定义为类
Jul 30 Python
Python开发五子棋小游戏
May 02 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
神族 Protoss 剧情介绍
2020/03/14 星际争霸
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
JS 网站性能优化笔记
2011/05/24 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
Codeigniter的一些优秀特性总结
2015/01/21 PHP
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
[Bootstrap-插件使用]Jcrop+fileinput组合实现头像上传功能实例代码
2016/12/20 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
如何解决.vue文件url引用文件的问题
2019/01/18 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
python网络编程示例(客户端与服务端)
2014/04/24 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Python3导入自定义模块的三种方法详解
2018/04/13 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
Python全面分析系统的时域特性和频率域特性
2020/02/26 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
软件设计的目标是什么
2016/12/04 面试题
工程业务员岗位职责
2013/12/31 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
心理咨询承诺书
2014/05/20 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
党员转正介绍人意见
2015/06/03 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
基于Python编写一个监控CPU的应用系统
2022/06/25 Python