GUI

python提供了多个图形开发界面的库,几个常用Python GUI库如下:

Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.,Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界面。

Jython:Jython程序可以和Java无缝集成。除了一些标准模块,Jython使用Java的模块。Jython几乎拥有标准的Python中不依赖于C语言的全部模块。比如,Jython的用户界面将使用Swing,AWT或者SWT。Jython可以被动态或静态地编译成Java字节码。

安装:

本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口。这里介绍wxPython :

根据自己的操作系统下载相应版本。

安装过程非常简单,以win7系统为例,点击下载的exe 文件,保持安装目录与本机的python目录一致就OK了。

创建并显示一个框架

importwx

app=wx.App()

win=wx.Frame(None)

win.Show()

app.MainLoop()

运行:

我们来创建一个文本编辑器,功能要求如下:

* 它可以打开给定文件名的文本文件;

* 它可以编辑文件文件

* 它可以保存文本文件

* 它可以正常退出程序

importwx

app=wx.App()

win=wx.Frame(None,title='Simple Editor',size=(410,335))

win.Show()

loadButton=wx.Button(win,label='Open',pos=(225,5),size=(80,25))

saveButton=wx.Button(win,label='Save',pos=(315,5),size=(80,25))

filename=wx.TextCtrl(win,pos=(5,5),size=(210,25))

contents=wx.TextCtrl(win,pos=(5,35),size=(390,260),style=wx.TE_MULTILINE|wx.HSCROLL)

app.MainLoop()

结果:

更智能的布局

使用尺寸器

importwx

app=wx.App()

win=wx.Frame(None,title='Simple Editor',size=(410,335))

bkg=wx.Panel(win)

loadButton=wx.Button(bkg,label='Open')

saveButton=wx.Button(bkg,label='Save')

filename=wx.TextCtrl(bkg)

contents=wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)

hbox=wx.BoxSizer()

hbox.Add(filename,proportion=1,flag=wx.EXPAND)

hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)

hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)

vbox=wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox,proportion=0,flag=wx.EXPAND | wx.ALL,border=5)

vbox.Add(contents,proportion=1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT,border=5)

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

运行结果:

运行这段代码,窗口会和上面的相同,但是使用了相对坐标而不是绝对坐标。

wx.BoxSizer的构造函数带有一个决定它是水平还是垂直的参数,默认为水平。

add方法有几个参数,proportion参数根据在窗口改变大小时所分配的空间设置比例。flag参数类似于构造函数中的style参数,可以使用按位或运算符连接构造符号常量。

事件处理

上面的界面做好了,但是我们点击按钮不起任何的作用。

在GUI术语中,用户执行的动作(比如 点击按钮)叫做事件。我们需要让程序注意这些事件并且作出反应。

假设写了一个负责打开文件的函数,并将其命令为load ,然后就可以像下面这样将函数作为loadButton的事件处理函数:

loadButton.Bind(wx.EVT_BUTTON,load)

完成了的程序

让我们来完成剩下的工作,现在需要的就是两个事件处理函数:load(打开)和save(保存)。当事件被调用时,它会收到一个事件对象作为它唯一的参数,其中包括发生了什么事情的信息,但是在这里可以忽略这方法的事情,因为程序只关心点击时发生的事情。

defload(event):

file=open(filename.GetValue())

contents.SetValue(file.read())

file.close()

上节刚刚学过文件的打开/读取,文件名使用filename对象GetValue方法获取。为了将文本引入文本区,只要使用contents.SetValue即可。

save函数和load类似,除了它需要写入("w’),以及用于文件处理部分的write方法,GetValue用于从文本区获得信息。

defsave(event):

file=open(filename.GetValue(),'w')

file.write(contents.GetValue())

file.close()

最终的GUI程序

importwxdefload(event):

file=open(filename.GetValue())

contents.SetValue(file.read())

file.close()defsave(event):

file=open(filename.GetValue(),'w')

file.write(contents.GetValue())

file.close()

app=wx.App()

win=wx.Frame(None,title='Simple Editor',size=(410,335))

bkg=wx.Panel(win)

loadButton=wx.Button(bkg,label='Open')

loadButton.Bind(wx.EVT_BUTTON,load)

saveButton=wx.Button(bkg,label='Save')

saveButton.Bind(wx.EVT_BUTTON,save)

filename=wx.TextCtrl(bkg)

contents=wx.TextCtrl(bkg,style=wx.TE_MULTILINE|wx.HSCROLL)

hbox=wx.BoxSizer()

hbox.Add(filename,proportion=1,flag=wx.EXPAND)

hbox.Add(loadButton,proportion=0,flag=wx.LEFT,border=5)

hbox.Add(saveButton,proportion=0,flag=wx.LEFT,border=5)

vbox=wx.BoxSizer(wx.VERTICAL)

vbox.Add(hbox,proportion=0,flag=wx.EXPAND | wx.ALL,border=5)

vbox.Add(contents,proportion=1,flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT,border=5)

bkg.SetSizer(vbox)

win.Show()

app.MainLoop()

运行结果:

使用步骤:

下面玩转这个小程序步骤:

1、文本框输入hello8.txt

2、文本区输入Hello.world!

3、点击保存(不会有保存成功的提示,但它已经成功了)

4、关闭编辑器,重新运行打开。

5、文件框输入hello8.txt ,点击"打开”按钮,上次编辑的内容(Hello.world!)在文本区出现了。

窗口含有一个"hello’标签按钮,点击hello,会在文本框中显示'Hello,world!'

importwxdefhello(event):print 'Hello,world!'app=wx.App()

win=wx.Frame(None,title='Hello,wxPython!',size=(200,100))

button=wx.Button(win,label='Hello')

button.Bind(wx.EVT_BUTTON,hello)

win.Show()

app.MainLoop()

python打开界面-python学习笔记(图形用户界面)相关推荐

  1. Python学习笔记——图形用户界面(2)

    Checkbutton控件 Checkbutton控件用来创建复选框.下列是Checkbutton控件的属性. (1)onvalue,offvalue:设置Checkbutton控件的variable ...

  2. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  3. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  4. 全国计算机等级考试二级Python精品题库学习笔记1

    全国计算机等级考试二级Python精品题库学习笔记1 精品试卷01 精品试卷01程序题 基本操作题 2:随机验证码 基本操作题 3:比赛成绩计算 Turtle 绘图题:同心圆 简单应用题 2:员工工资 ...

  5. Python中索引的学习笔记

    1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...

  6. Python地理做图——学习笔记

    Python地理做图--学习笔记 GMT 绘制海岸线 绘制地形并叠加海岸线 地理信息数据格式在线转换网址 适用OSGEO4w可以实现tif转nc,转grd 绘制grd和nc 除了投影方式-X, gmt ...

  7. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  8. Python第三方库pygame学习笔记(一)

    Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...

  9. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

最新文章

  1. ​防火墙(一)主机型防火墙
  2. HDU_2544 最短路(Dijkstra)
  3. 2021“MINIEYE杯”中国大学生算法设计超级联赛(2)I love max and multiply(转化)
  4. doublevalue_Java Integer类doubleValue()方法与示例
  5. python3-matplotlib基本使用(以折线图为例)
  6. 解决VS2005“无法启动调试,绑定句柄失效”
  7. 计算机英语 考研 翻译,研究生英语翻译笔记
  8. 【kafka】kafka 启动报错 InvalidReceiveException: Invalid receive (size = -720899)
  9. Visual Studio 2019 16.1 正式发布,更快更高效
  10. Linux操作系统中GDB工具常见用法(一)
  11. [网络安全自学篇] 八十四.《Windows黑客编程技术详解》之VS环境配置、基础知识及DLL延迟加载详解(1)
  12. LikeLib:区块链+云计算的结合技术现在成熟了吗?
  13. RHCA学习记录之RH318(一)-环境准备
  14. 作业报告12 定期存款利息计算器
  15. k6性能测试工具,并生成可视化报告
  16. 【精益生产】精益生产十大工具
  17. Spark环境搭建Standalone模式
  18. 【理解数据结构】队列的实现(C语言)
  19. 【GitHubShare】让你的电脑上全是喵喵,谁又能拒绝可爱呢?
  20. php利用飞信api给好友发短信

热门文章

  1. 深度学习TensorFlow生产环境部署(模型部署篇)
  2. Qt总结之四:读取文件夹所有文件
  3. 一些关于OTA的相当不错的网站和资料
  4. Django合并多个查询结果
  5. python之路--day10-闭包函数
  6. SQL区分大小写——转载
  7. ICEFaces Note(7)
  8. POJ2033 LA3078 HDU1508 ZOJ2202 Alphacode【DFS+DP】
  9. Bailian4134 查找最接近的元素【二分查找】
  10. HDU1248 寒冰王座【0/1背包+DP】