GUI(Graphical User Interface)


即图形用户接口,又称图形用户接口。
是指采用图形方式显示的计算机操作用户界面。GUI 是屏幕产品的视觉体验和互动操作部分。

“你的应用程序是否有一个传统的图形用户界面?”对于某些应用程序来说,这个答案是肯定的,如果这个应用程序本质上是图形化的,且在本地机器上做了优化或者是在本地运行,那么就要考虑构建一个桌面图形用户界面。如果是更为通用的程序,那么最好添加命令行或者Web界面。

  命令行拥有很多优势,例如速度、远程访问、可重用性,可脚本化和控制等等。这对用户来说往往会比图形用户界面更为重要。当然,现在有很多库可以支持设计很好的命令行程序,如Click,Cement和Cliff。

  同样的,对于本地运行的程序来说,Web界面也是十分值得考虑的。尤其是当你觉得用户可能希望应用程序能够像Django,Flask或Pyramid这样的项目可以直接远程托管。甚至你可以使用类似pywebview这样的库将Web应用程序包裹在native GUI window。

1. Tkinter

简单介绍:

Tkinter模块是Python的标准GUI工具包。是[Tcl / Tk]() 封装在 python 中的*接口*。是90年代初推出的流行图形界面。除此之外,Tkinter的扩展集pmw和Tix功能上都要相对它强大,但Tkinter却是最基本的。我认为,在用python 做gui开发,tkinter是最基本的知识。也许以后的开发中并不常用tkinter,但是一些小型的应用上面,它还是很有用的,而且开发速度也很快。
Tkinter可以使用Python许可证,在Tcl / Tk的BSD许可证之上。

优势

Tkinter用起来非常简单,python自带的 IDLE就是采用它写的。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。它拥有大量的资源,包括书籍和代码示例,以及活跃的用户社区,广泛的简单入门示例。

学习

使用Tkinter的步骤:

-导入Tkinter

-创建顶层窗口

-在顶层上创建其他控件

-控件与后台代码链接

-进入主程序循环事件

附:一个简单的文件管理器源代码


#!/usr/bin/env python import os
from time import sleep
from Tkinter import * class DirList(object):
def __init__(self, initdir=None):
self.top = Tk()
self.label = Label(self.top,
text='Directory Lister v1.2')
self.label.pack() self.cwd=StringVar(self.top) self.dirl = Label(self.top, fg='blue',
font=('Helvetica', 12, 'bold'))
self.dirl.pack() self.dirfm = Frame(self.top)
self.dirsb = Scrollbar(self.dirfm)
self.dirsb.pack(side=RIGHT, fill=Y)
self.dirs = Listbox(self.dirfm, height=15,
width=50, yscrollcommand=self.dirsb.set)
self.dirs.bind('<Double-1>', self.setdirandgo)
self.dirsb.config(command=self.dirs.yview)
self.dirs.pack(side=LEFT, fill=BOTH)
self.dirfm.pack() self.dirn = Entry(self.top, width=50,
textvariable=self.cwd)
self.dirn.bind('<Return>', self.dols)
self.dirn.pack() self.bfm = Frame(self.top)
self.clr = Button(self.bfm, text='Clear',
command=self.clrdir,
activeforeground='white',
activebackground='blue')
self.ls = Button(self.bfm,
text='List Directory',
command=self.dols,
activeforeground='white',
activebackground='green')
self.quit = Button(self.bfm, text='Quit',
command=self.top.quit,
activeforeground='white',
activebackground='red')
self.clr.pack(side=LEFT)
self.ls.pack(side=LEFT)
self.quit.pack(side=LEFT)
self.bfm.pack() if initdir:
self.cwd.set(os.curdir)
self.dols() def clrdir(self, ev=None):
self.cwd.set('') def setdirandgo(self, ev=None):
self.last = self.cwd.get()
self.dirs.config(selectbackground='red')
check = self.dirs.get(self.dirs.curselection())
if not check:
check = os.curdir
self.cwd.set(check)
self.dols() def dols(self, ev=None):
error = ''
tdir = self.cwd.get()
if not tdir:
tdir = os.curdir if not os.path.exists(tdir):
error = tdir + ': no such file'
elif not os.path.isdir(tdir):
error = tdir + ': not a directory' if error:
self.cwd.set(error)
self.top.update()
sleep(2)
if not (hasattr(self, 'last') \
and self.last):
self.last = os.curdir
self.cwd.set(self.last)
self.dirs.config(
selectbackground='LightSkyBlue')
self.top.update()
return self.cwd.set(
'FETCHING DIRECTORY CONTENTS...')
self.top.update()
dirlist = os.listdir(tdir)
dirlist.sort()
os.chdir(tdir)
self.dirl.config(text=os.getcwd())
self.dirs.delete(0, END)
self.dirs.insert(END, os.curdir)
self.dirs.insert(END, os.pardir)
for eachFile in dirlist:
self.dirs.insert(END, eachFile)
self.cwd.set(os.curdir)
self.dirs.config(
selectbackground='LightSkyBlue') def main():
d = DirList(os.curdir)
mainloop() if __name__ == '__main__':
main()

2. PyQt

简单介绍:

PyQt实现了Python与Qt库(是一个完整的C++应用程序开发框架,是目前最强大的界面库之一)的完美融合,是一个创建GUI应用程序的工具包。使用它开发出的应用程序在其他平台上会拥有熟悉的外观和感觉。

优势:

是一个比较流行的库,功能强大,开发的界面也是挺不错的,跨平台的支持很好,同样适应于大型应用。

学习

3. WxPython

简单介绍:

WxPython(python对WxWidgets的移植)的功能上面要强于 Tkinter 。面向对象的编程风格,设计的框架类似于MFC (是目前最强大的界面库之一)。对于大型GUI应用上面,WxPython还是具有很强的优势的。boa constructor可以帮助我们快速可视地构建WxWidgets界面。但是需要注意的是,可能需要将WxPython与应用程序捆绑在一起,因为它不会随Python自动安装。
WxPython使用其父项目的wxWindows库许可证。

优势

它的入门使用也比较容易,比较流行的一个 Tkinter 的替代品,在 各种平台下都表现挺好。

学习

  1. wxPython中基本控件学习 ( 转载自博客园 "风清扬001" )

  2. wxPython学习笔记系列 ( 转载自博客园 "夜雨寄北丶" )

  3. wxPython的基础教程

4. PySide

简单介绍

这个框架最早是由 Nokia 的芒果团队做完的,在2009年8月,PySide首次发布。提供和PyQt类似的功能,并相容 API。但与 PyQt 不同处为使用LGPL授权。但是,众所周知的原因,这个团队已经消失了。据说,Qt 重新接管了它的开发工作,而且处于活跃状态。
是另一个 Python 对跨平台的 GUI 工具集 Qt 的包装(可认为PySide是跨平台的应用程式框架Qt的Python绑定版本),捆绑在 Python 当中,最初由 BoostC++ 库实现,后来迁移到 Shiboken。

优势

另一个比较流行的一个 Tkinter 的替代品,学习起来也是相对容易,因为是对GUI工作机
Qt 的包装,跨平台性支持比较好。

学习

5. PyGTK

简单介绍

Gtk是linux下Gnome的核心开发库,是一系列的 Python 对 GTK+ GUI 库的包装,功能上面非常齐全。值得说明的是,在windows平台下gtk的显示风格并不是特别本地化。不过他带的glade的界面设计器还是可以帮你省不少事的。

优势

又一个比较流行的一个 Tkinter 的替代品,许多 Gnome 下的著名应用程序的 GUI 都是使用 PyGTK 实现的,比如 BitTorrent ,GIMP和 Gedit 都有可选的实现,在 Windows 平台 似乎表现不太好,这点也无可厚非,毕竟使用的是GTK 的 GUI 库。

6. Jython

尝试过用python访问java类库吗,那么就用jython吧,Jython 程序可以和 Java 无缝集成。
(除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。Jython 可以被动态或静态地编译成 Java 字节码)
Jython其实可以认为是另外一个python开发环境,基于java的,但是大多数的CPython调用jython下还是可以的。你可以在jython环境下像使用java一样来通过python的语法来调用java语言,真的很酷。

7. MFC

Windows Pywin32允许你像VC一样的形式来使用PYTHON开发win32应用。代码风格可以类似win32 sdk,也可以类似MFC,由你选择。如果你仍不放弃vc一样的代码过程在python下,那么这就是一个不错的选择。

8. PythonCard

PythonCard其实是对wxPython的再封装。不过封装的更加简单,使用起来觉得比wxPython更直观,也更简单化了。

9. Dabo

仍是一个基于wxpython的再封装库,没用过,不太了解。它提供数据库访问,商业逻辑以及用户界面。

10. AnyGui

通过底层的api来访问其它工具集,像tkinter,wxpython和qt.具体也没怎么用过。

11. WPY

MFC风格的Gui开发库,代码风格也类似于MFC,仅管如此,你依旧可以使用这个库来开发GUI应用,而不用担心平台移植的问题。她同样是一个跨平台的库。

12. IronPython

如果你要想开发.net下面的应用的话,那么IronPython就是你的选择,与jython有点类似,他同样支持标准的python模块,但同样增加了对.net库的支持。你也可以理解为他是另一个python开发环境。你可以非常方便地使用python语法进行.net应用的开发,这一点听起来真的挺有意思。

附:如果你是java用户,那么你就用jython,除了可以享受python的模块功能及语法外,你可以找到许多java的影子;

如果你是.net用户,那么就用iron python吧。

如果你对Visual C++很熟悉,那么你可以使用MFC,WPY或是wxPython,当然我更建议wxPython了。

当然,我认为对于tkinter是每一个原来搞C的人都应该了解和学习的GUI库,因为它很轻便,小型应用就可以使用它来搞定,而对于较大型应用可以采用pyGtk,pyQt,WxPython或 PythonCard来搞定,这样的话,既可以注重知识的衔接性,也可以快速进行软体的开发了。

参考资料:

[1]Tkinter 的介绍 : http://en.wikipedia.org/wiki/Tkinter

主页

[2]PyQt 的介绍 : http://en.wikipedia.org/wiki/PyQt

主页

[3]wxPython 的介绍 : http://en.wikipedia.org/wiki/WxPython

主页

[4]PySide 的介绍 : http://en.wikipedia.org/wiki/PySide

主页

[5]PyGTK 的介绍 : http://en.wikipedia.org/wiki/PyGTK

主页

Python入门 —— 03GUI界面编程的更多相关文章

  1. Python入门之面向对象编程(一)面向对象概念及优点

    概念 谈到面向对象,很多程序员会抛出三个词:封装.继承和多态:或者说抽象.一切都是对象之类的话,然而这会让初学者更加疑惑.下面我想通过一个小例子来说明一下 面向对象一般是和面向过程做对比的,下面是一个 ...

  2. Python入门之面向对象编程(四)Python描述器详解

    本文分为如下部分 引言——用@property批量使用的例子来引出描述器的功能 描述器的基本理论及简单实例 描述器的调用机制 描述器的细节 实例方法.静态方法和类方法的描述器原理 property装饰 ...

  3. Python入门之面向对象编程(二)python类的详解

    本文通过创建几个类来覆盖python中类的基础知识,主要有如下几个类 Animal :各种属性.方法以及属性的修改 Dog :将方法转化为属性并操作的方法 Cat :私人属性讲解,方法的继承与覆盖 T ...

  4. Python可视化界面编程入门

    Python可视化界面编程入门具体实现代码如所示: (1)普通可视化界面编程代码入门: import sysfrom PyQt5.QtWidgets import QWidget,QApplicati ...

  5. 笔记|《简明Python教程》:编程小白的第一本python入门书

    <简明Python教程>这本书是初级的Python入门教材,初级内容基本覆盖,对高级内容没有做深入纠结.适合刚接触Python的新手,行文比较简洁轻松,读起来也比较顺畅. 下面是我根据各个 ...

  6. Python入门经典. 以解决计算问题为导向的Python编程实践

    Python入门经典. 以解决计算问题为导向的Python编程实践(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1juLsew8UiOErRheQPOuTaw 提取 ...

  7. 读书笔记:编程小白的第一本python入门书

    书名:编程小白的第一本python入门书 作者:侯爵 出版社/出处:图灵社区 年份:2016年 封面: 感想: 本书短小精悍,精华部分在于给编程小白打了鸡血的同时输出了一种“高效学习法的思想”. 个人 ...

  8. PySide——Python图形化界面入门教程(四)

    PySide——Python图形化界面入门教程(四) ——创建自己的信号槽 ——Creating Your Own Signals and Slots 翻译自:http://pythoncentral ...

  9. PySide——Python图形化界面入门教程(六)

    PySide——Python图形化界面入门教程(六) ——QListView和QStandardItemModel 翻译自:http://pythoncentral.io/pyside-pyqt-tu ...

随机推荐

  1. 定制化移动办公APP:打造企业专属的“钉钉”“纷享销客”,实现企业办公管理一体化

    一.项目背景 随着信息化社会的高速发展,市场竞争日益激烈,传统的管理和办公系统多且复杂,用户需要使用多个系统才可完成一项工作,而且各个系统的界面和风格存在差异,造成了信息查找不便,大大降低了用户的工作 ...

  2. Linux ->> Chmod命令改变文件/文件夹属性

    简介 chmod命令用于改变linux系统文件或目录的访问权限,控制用户/用户组对文件或目录的访问权限. 用法: 两种用法:1)用字母r(读).w(写).x(执行)表示权限类型:2)用数字表示,4代表 ...

  3. C++ Notes 1 - size_type - Accelerated Ch3

    1. 为什么用string::size_type而不是int? --Why use string::size_type ? int is supposed to work! it holds numb ...

  4. Service Discovery in WCF 4.0 – Part 2 z

    Service Discovery in WCF 4.0 – Part 2 In the previous post I discussed about the basic usage of WCF ...

  5. Intellij idea 一次性包导入

    Intellij idea中优化包导入用的快捷键是 ctrl + alt + o,但是如果需要一次性优化自动导入包,可以按照如下配置

  6. JAVA串口开发帮助类分享-及写在马年末

    摘要: 在系统集成开发过程中,存在着各式的传输途径,其中串口经常因其安全性高获得了数据安全传输的重用,通过串口传输可以从硬件上保证数据传输的单向性,这是其它介质所不具备的物理条件.下面我就串口java ...

  7. 异常:Neither BindingResult nor plain target object for bean name 'command' available as request attribute

    Neither BindingResult nor plain target object for bean name 'command' available as request attribute ...

  8. LayIM项目之基础数据获取代码优化,Dapper取代ADO.NET

    前言 最近在开发LayIM融云版,也在进行项目重构,现在在看之前的代码,简直不敢直视.不过不知道以后看现在的代码是不是也是糟糕的一批.LayIM有个接口,一般接触过的开发人员都不会生疏,就是init接 ...

  9. CSS布局方面的一些小总结

    1. display属性 display是CSS布局的第一站,它控制一个元素以什么“身份”出现在页面布局当中.它的值有很多个,常用的有block,inline,inline-block,table,n ...

  10. 火狐中jq的attr出现的bug问题用prop代替

    再工作的时候遇到一个很奇怪的问题 ,就是attr属性不好使!就问度娘去了...... 结果如下: .prop()   1..prop( propertyName ) 获取匹配集合中第一个元素的Prop ...