为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计算最小优先级队列代码分享
Dec 18 Python
Python操作列表的常用方法分享
Feb 13 Python
Python编程语言的35个与众不同之处(语言特征和使用技巧)
Jul 07 Python
python计算圆周率pi的方法
Jul 11 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 Python
django允许外部访问的实例讲解
May 14 Python
详解python while 函数及while和for的区别
Sep 07 Python
python的常用模块之collections模块详解
Dec 06 Python
浅析Python3中的对象垃圾收集机制
Jun 06 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
python操作链表的示例代码
Sep 27 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
php防盗链的常用方法小结
2010/07/02 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php生成excel列序号代码实例
2013/12/24 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
PHP实现的蚂蚁爬杆路径算法代码
2015/12/03 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
js脚本获取webform服务器控件的方法
2014/05/16 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
通过vue-cli3构建一个SSR应用程序的方法
2018/09/13 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
react组件基本用法示例小结
2020/04/27 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
Mac OS X10.9安装的Python2.7升级Python3.3步骤详解
2013/12/04 Python
利用Python和OpenCV库将URL转换为OpenCV格式的方法
2015/03/27 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
解决python flask中config配置管理的问题
2019/07/26 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
2019/08/26 Python
快速解决pymongo操作mongodb的时区问题
2020/12/05 Python
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
2020/06/02 HTML / CSS
日本非常有名的内衣丝袜品牌:GUNZE
2017/01/06 全球购物
《动手做做看》教学反思
2014/04/09 职场文书
一年级学生评语
2014/04/23 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
处罚决定书范文
2015/06/24 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
Java使用jmeter进行压力测试
2021/07/09 Java/Android