[TOC]
0x00 前言 Python下各种GUI简介、使用优缺点对比:
GUI编程
简介特点
优缺点
PyQt
Python 对跨平台的 GUI 工具集 Qt 的包装实现了 440 个类以及 6000 个函数或者方法 ,PyQt 是作为 Python 的插件实现的。
比较流行的一个 Tkinter 的替代品,功能 非常强大,可以用Qt开发多美漂亮的界面,也就可以用PyQt开发多么漂亮的界面。 跨平台的支持很好,不过在商业授权上似乎存在一些问题。
Tkinter
绑定了 Python 的 Tk GUI 工具集 ,就是Python 包装的Tcl代码,通过内嵌在 Python 解释器内部的 Tcl 解释器实现, Tkinter的调用转换成 Tcl 命令,然后交给 Tcl 解释器进行解释,实现 Python 的 GUI 界面。对比Tk和其它语言的绑定比如 PerlTk 是直接由 Tk 中的 C 库实现的。
历史最悠久Python 事实上的标准 GUI , Python 中使用 Tk GUI 工具集的标准接口,已经包括在标准的 Python Windows 安装中,著名的 IDLE 就是使用 Tkinter 实现 GUI 的创建的 GUI 简单,学起来和用起来也简单。
wxPython
Python 对跨平台的 GUI 工具集 wxWidgets ( C++ 编写)的包装,作为 Python 的一个 扩展模块实现。
比较流行的一个 Tkinter 的替代品,在各种平台下都表现挺好。
PyGTK
一系列的 Python 对 GTK+ GUI 库的包装。
比较流行的一个 Tkinter 的替代品,许多 Gnome 下的著名应用程序的 GUI 都是使用 PyGTK 实现的,比如 BitTorrent , GIMP和 Gedit 都有可选的实现,在 Windows 平台 似乎表现不太好,这点也无可厚非,毕竟使用的是GTK 的 GUI 库。
PySide
另一个 Python 对跨平台的 GUI 工具集 Qt 的包装,捆绑在 Python 当中,最初由 BoostC++ 库实现,后来迁移到 Shiboken。
比较流行的一个 Tkinter 的替代品和上面类似至于两者的区别
easygui
Python 中一个非常简单的 GUI 编程模块,不同于其他的 GUI 生成器,它不是事件驱动的
调用函数实现,并且使用简单;为用户提供了简单的 GUI 交互接口,不需要程序员知道任何有关 tkinter,框架,部件,回调或 lambda 的任何细节。
目录导航 (1) easygui 模块 (2) wxPython 模块
补充来源:
0x01 Easygui 模块 1. EasyGUI介绍 1.1 什么是 EasyGUI? EasyGUI 是 Python 中一个非常简单的 GUI 编程模块,不同于其他的 GUI 生成器,它不是事件驱动的。 相反所有的 GUI 交互都是通过简地函数调用就可以实现,EasyGUI 为用户提供了简单的 GUI 交互接口,不需要程序员知道任何有关 tkinter,框架,部件,回调或 lambda 的任何细节。
EasyGUI 是运行在 Tkinter 上并拥有自身的事件循环,而 IDLE 也是 Tkinter 写的一个应用程序并也拥有自身的事件循环。因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的 EasyGUI 程序有这样的问题,请尝试在 IDLE 外去运行你的程序。
环境版本:Python 3.7.2,easygui-0.98.1-py3.7.egg 官网:https://github.com/robertlugg/easygui 使用pip进行安装:pip install easygui
1.2 导入EasyGUI模块以及方法介绍 为了使用 EasyGUI 这个模块,你应该先导入它,
导入语句是:
[TOC]
0x00 前言 Python下各种GUI简介、使用优缺点对比:
GUI编程
简介特点
优缺点
PyQt
Python 对跨平台的 GUI 工具集 Qt 的包装实现了 440 个类以及 6000 个函数或者方法 ,PyQt 是作为 Python 的插件实现的。
比较流行的一个 Tkinter 的替代品,功能 非常强大,可以用Qt开发多美漂亮的界面,也就可以用PyQt开发多么漂亮的界面。 跨平台的支持很好,不过在商业授权上似乎存在一些问题。
Tkinter
绑定了 Python 的 Tk GUI 工具集 ,就是Python 包装的Tcl代码,通过内嵌在 Python 解释器内部的 Tcl 解释器实现, Tkinter的调用转换成 Tcl 命令,然后交给 Tcl 解释器进行解释,实现 Python 的 GUI 界面。对比Tk和其它语言的绑定比如 PerlTk 是直接由 Tk 中的 C 库实现的。
历史最悠久Python 事实上的标准 GUI , Python 中使用 Tk GUI 工具集的标准接口,已经包括在标准的 Python Windows 安装中,著名的 IDLE 就是使用 Tkinter 实现 GUI 的创建的 GUI 简单,学起来和用起来也简单。
wxPython
Python 对跨平台的 GUI 工具集 wxWidgets ( C++ 编写)的包装,作为 Python 的一个 扩展模块实现。
比较流行的一个 Tkinter 的替代品,在各种平台下都表现挺好。
PyGTK
一系列的 Python 对 GTK+ GUI 库的包装。
比较流行的一个 Tkinter 的替代品,许多 Gnome 下的著名应用程序的 GUI 都是使用 PyGTK 实现的,比如 BitTorrent , GIMP和 Gedit 都有可选的实现,在 Windows 平台 似乎表现不太好,这点也无可厚非,毕竟使用的是GTK 的 GUI 库。
PySide
另一个 Python 对跨平台的 GUI 工具集 Qt 的包装,捆绑在 Python 当中,最初由 BoostC++ 库实现,后来迁移到 Shiboken。
比较流行的一个 Tkinter 的替代品和上面类似至于两者的区别
easygui
Python 中一个非常简单的 GUI 编程模块,不同于其他的 GUI 生成器,它不是事件驱动的
调用函数实现,并且使用简单;为用户提供了简单的 GUI 交互接口,不需要程序员知道任何有关 tkinter,框架,部件,回调或 lambda 的任何细节。
目录导航 (1) easygui 模块 (2) wxPython 模块
补充来源:
0x01 Easygui 模块 1. EasyGUI介绍 1.1 什么是 EasyGUI? EasyGUI 是 Python 中一个非常简单的 GUI 编程模块,不同于其他的 GUI 生成器,它不是事件驱动的。 相反所有的 GUI 交互都是通过简地函数调用就可以实现,EasyGUI 为用户提供了简单的 GUI 交互接口,不需要程序员知道任何有关 tkinter,框架,部件,回调或 lambda 的任何细节。
EasyGUI 是运行在 Tkinter 上并拥有自身的事件循环,而 IDLE 也是 Tkinter 写的一个应用程序并也拥有自身的事件循环。因此当两者同时运行的时候,有可能会发生冲突,且带来不可预测的结果。因此如果你发现你的 EasyGUI 程序有这样的问题,请尝试在 IDLE 外去运行你的程序。
环境版本:Python 3.7.2,easygui-0.98.1-py3.7.egg 官网:https://github.com/robertlugg/easygui 使用pip进行安装:pip install easygui
1.2 导入EasyGUI模块以及方法介绍 为了使用 EasyGUI 这个模块,你应该先导入它,
导入语句是:1 2 3 4 5 6 7 import easyguifrom easygui import *import easygui as gPython3/Lib/site-packages/easygui-0.98 .1 -py3.7 .egg/easygui/easygui.py easygui.egdemo()
模块方法一览表:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 (0 ) easygui.egdemo() '''消息对话框''' msgbox(msg='(Your message goes here)' , title=' ' , ok_button='OK' , image=None , root=None ) enterbox(msg='Enter something.' , title=' ' , default='' , strip=True , image=None , root=None ) integerbox(msg='' , title=' ' , default=None , lowerbound=0 , upperbound=99 , image=None , root=None ) multenterbox(msg='Fill in values for the fields.' , title=' ' , fields=[], values=[], callback=None , run=True ) passwordbox(msg='Enter your password.' , title=' ' , default='' , image=None , root=None ) '''按钮对话框''' ccbox(msg='Shall I continue?' , title=' ' , choices=('C[o]ntinue' , 'C[a]ncel' ), image=None , default_choice='C[o]ntinue' , cancel_choice='C[a]ncel' ) ynbox(msg='Shall I continue?' , title=' ' , choices=('[<F1>]Yes' , '[<F2>]No' ), image=None , default_choice='[<F1>]Yes' , cancel_choice='[<F2>]No' ) buttonbox(msg='' , title=' ' , choices=('Button[1]' , 'Button[2]' , 'Button[3]' ), image=None , images=None , default_choice=None , cancel_choice=None , callback=None , run=True ) indexbox(msg='Shall I continue?' , title=' ' , choices=('Yes' , 'No' ), image=None , default_choice='Yes' , cancel_choice='No' ) boolbox(msg='Shall I continue?' , title=' ' , choices=('[Y]es' , '[N]o' ), image=None , default_choice='Yes' , cancel_choice='No' ) '''选择/多选框''' choicebox(msg='Pick an item' , title='' , choices=[], preselect=0 , callback=None , run=True ) multchoicebox(msg='Pick an item' , title='' , choices=[], preselect=0 , callback=None , run=True ) '''显示文本框''' textbox(msg='' , title=' ' , text='' , codebox=False , callback=None , run=True ) codebox(msg='' , title=' ' , text='' ) '''文件目录选择框''' diropenbox(msg=None , title=None , default=None ) fileopenbox(msg=None , title=None , default='*' , filetypes=None , multiple=False ) filesavebox(msg=None , title=None , default='' , filetypes=None ) default 参数指定一个默认路径,通常包含一个或多个通配符。 如果设置了 default 参数,fileopenbox() 显示默认的文件路径和格式。 default 默认的参数是 '*' ,即匹配所有格式的文件。 default="c:/fishc/*.py" 即显示 C:\fishc 文件夹下所有的 Python 文件。 default="c:/fishc/test*.py" 即显示 C:\fishc 文件夹下所有的名字以 test 开头的 Python 文件。 可以是包含文件掩码的字符串列表,例如:filetypes = ["*.txt" ] 可以是字符串列表,列表的最后一项字符串是文件类型的描述,例如:filetypes = ["*.css" , ["*.htm" , "*.html" , "HTML files" ]]
1.3 EgStore 存储过程 GUI 编程中一个常见的场景就是要求用户设置一下参数,然后保存下来,以便下次用户使用你的程序的时候可以记住他的设置;为了实现对用户的设置进行存储和恢复这一过程,EasyGUI 提供了一个叫做 EgStore 的类;
案例:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 from easygui import EgStoreclass Settings (EgStore) : def __init__ (self, filename) : self.author = "" self.book = "" self.filename = filename self.restore() settingsFilename = "settings.txt" settings = Settings(settingsFilename) author = "WeiyiGEEK" book = "零基础入门学习Pyhon" settings.author = author settings.book = book settings.store() print("\n保存完毕\n" )
1.4 捕获异常 通过 exceptionbox() 函数提供了更好的方式去处理异常;使用 EasyGUI 编写 GUI 程序,有时候难免会产生异常,当然这取决于你如何运行你的应用程序,当你的应用程序崩溃的时候,堆栈追踪可能会被抛出,或者被写入到 stdout 标准输出函数中;
当异常出现的时候,exceptionbox() 会将堆栈追踪显示在一个 codebox() 中,并且允许你做进一步的处理。 举个例子:1 2 3 4 5 6 import easyguitry : print('I Love FishC.com!' ) int('FISHC' ) except : easygui.exceptionbox()
weiyigeek.top-异常捕获
2. EasyGUI使用案例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 import easygui as gnickname = input('请输入您的网名:' ) love = input("请输入您的爱好:" ) age = g.enterbox('请输入您的年龄:' ,'信息输入' ) res = g.msgbox('您的输入的个人信息是:' +nickname+', 爱好:' +love+', 年龄:' +age,'个人信息' ,'确认无误' ) print("msgbox返回值:" ,res) sex = g.buttonbox('选择您的性别:' ,'信息录入' ,('男' ,'女' ,'none' ),default_choice='none' ) city = g.multchoicebox('城市选择' ,'信息录入' ,['北京' ,'上海' ,'广州' ,'深圳' ,'重庆' ]) savedir = g.diropenbox(msg=None , title='' , default=None ) test = g.fileopenbox(msg=None , title=None , default='*' , filetypes=None , multiple=False ) savefile = g.filesavebox(msg=None , title='保存文件的目录' , default='' , filetypes=None ) with open(savefile,'w+' ,encoding='utf-8' ) as f: f.write(nickname+'\n' +love+'\n' +age+'\n' +res+'\n' +sex+'\n' ) for x in city: f.write(x+'\n' ) g.textbox(nickname+'\n' +love+'\n' +age+'\n' +res+'\n' +sex+'\n' ,'效率' ,'value' ) print("模块测试完成!" )
weiyigeek.top-msgbox
weiyigeek.top-执行完成