为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中的列表知识点汇总
Apr 14 Python
详解详解Python中writelines()方法的使用
May 25 Python
Python聊天室实例程序分享
Jan 05 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
Django基础知识与基本应用入门教程
Jul 20 Python
python实现汉诺塔算法
Mar 01 Python
在python中pandas的series合并方法
Nov 12 Python
python绘制封闭多边形教程
Feb 18 Python
Python+PyQt5实现灭霸响指功能
May 25 Python
python合并多个excel文件的示例
Sep 23 Python
如何用python识别滑块验证码中的缺口
Apr 01 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 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
一个SQL管理员的web接口
2006/10/09 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
深入理解JavaScript系列(2) 揭秘命名函数表达式
2012/01/15 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
2015/08/12 Javascript
JS实现带有抽屉效果的产品类网站多级导航菜单代码
2015/09/15 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
JS字符串去除连续或全部重复字符的实例
2018/03/08 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
深入理解JavaScript 箭头函数
2019/05/30 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
Python import用法以及与from...import的区别
2015/05/28 Python
浅谈python中的变量默认是什么类型
2016/09/11 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
python模块smtplib学习
2018/05/22 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
python实现模拟器爬取抖音评论数据的示例代码
2021/01/06 Python
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
美国最大点评网站:Yelp
2018/02/14 全球购物
新闻人物通讯稿
2014/10/09 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
2014年保育员工作总结
2014/12/02 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
vue+element ui实现锚点定位
2021/06/29 Vue.js
Netflix《海贼王》真人版剧集多张片场照曝光
2022/04/04 日漫
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python