为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下singleton模式的实现方法
Jul 16 Python
Python实现的多线程端口扫描工具分享
Jan 21 Python
Python实现建立SSH连接的方法
Jun 03 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
详解Python中的相对导入和绝对导入
Jan 06 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
Jun 21 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
使用Pytorch来拟合函数方式
Jan 14 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
使用python实现下载我们想听的歌曲,速度超快
Jul 09 Python
Python pandas对excel的操作实现示例
Jul 21 Python
微信小程序调用python模型
Apr 21 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
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
js实现大转盘抽奖游戏实例
2015/06/24 Javascript
怎么限制input的text里输入的值只能是数字(正则、js)
2016/05/16 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
以一段代码为实例快速入门Python2.7
2015/03/31 Python
import的本质解析
2017/10/30 Python
详解Python nose单元测试框架的安装与使用
2017/12/20 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
Python API len函数操作过程解析
2020/03/05 Python
Python Selenium自动化获取页面信息的方法
2020/08/31 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
为什么会有内存对齐
2016/10/10 面试题
什么是GWT的Entry Point
2013/08/16 面试题
热能动力工程毕业生自荐信
2013/11/07 职场文书
关于诚信的活动方案
2014/08/18 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
2014年生产管理工作总结
2014/12/23 职场文书
监考失职检讨书
2015/01/26 职场文书
同意报考证明
2015/06/17 职场文书
Java实现房屋出租系统详解
2021/10/05 Java/Android
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android
Redis过期数据是否会被立马删除
2022/07/23 Redis