为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 代码性能优化技巧分享
Aug 07 Python
python实现带验证码网站的自动登陆实现代码
Jan 12 Python
使用相同的Apache实例来运行Django和Media文件
Jul 22 Python
一波神奇的Python语句、函数与方法的使用技巧总结
Dec 08 Python
python 自动化将markdown文件转成html文件的方法
Sep 23 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
pycharm安装和首次使用教程
Aug 27 Python
selenium设置proxy、headers的方法(phantomjs、Chrome、Firefox)
Nov 29 Python
python仿抖音表白神器
Apr 08 Python
python实现银联支付和支付宝支付接入
May 07 Python
python是怎么被发明的
Jun 15 Python
python cv2图像质量压缩的算法示例
Jun 04 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连接access数据库
2008/03/27 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
JS中parseInt()和map()用法分析
2016/12/16 Javascript
angularjs实现的前端分页控件示例
2017/02/10 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
vue中promise的使用及异步请求数据的方法
2018/11/08 Javascript
javascript设计模式 ? 组合模式原理与应用实例分析
2020/04/14 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
利用Python如何生成随机密码
2016/04/20 Python
python实现飞机大战微信小游戏
2020/03/21 Python
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
请假条格式范文
2014/04/10 职场文书
会计求职自荐信
2014/06/20 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
个人年度总结报告
2015/03/09 职场文书
学校通报表扬范文
2015/05/04 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
新闻稿标题
2015/07/18 职场文书
团干部培训班心得体会
2016/01/06 职场文书
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫