图形用户界面

丰富的平台

写作Python GUI程序前,须要决定使用哪个GUI平台。

简单来说,平台是图形组件的一个特定集合。能够通过叫做GUI工具包的给定Python模块进行訪问。

工具包

描写叙述

Tkinter

使用Tk平台。非常easy得到。

半标准。

wxpython

基于wxWindows。

跨平台越来越流行。

PythonWin

仅仅能在Windows上使用。

使用了本机的Windows GUI功能。

JavaSwing

仅仅能用于Jython。使用本机的Java GUI。

PyGTK

使用GTK平台,在linux上非常流行。

PyQt

使用Qt平台。跨平台。

每一个工具包都有利弊,但非常大程度上取决于个人喜好。

下面以wxPython为例。

下载和安装wxPython

下载地址:

http://wxpython.org/download.php

注意:假设python是64位的,则必须选用64位的wxPython,否则即便是64位的操作系统也应该选用32位的wxPython。

建议下载wxPython的演示版本号,并研究它。

创建演示样例GUI应用程序

開始

開始须要导入wx模块:

import wx

编写wxPython程序的方法非常多,但不可避免的事情是创建应用程序对象。主要的应用程序类是ex.App,它负责幕后全部的初始化。

最简单的wxPython程序应该像以下这样:

import wx

app=wx.App()

app.MainLoop()

由于没有不论什么用户能够交互的窗体,程序会立马退出。

wx包中的方法都是以大写字母开头的,这和python的习惯是相反的。这样做的原因是这些方法名和基础的c++包wxWidgets中的方法名都是相应的。虽然没有正式的规则反对方法或者函数名以大写字母开头,但规范的做法是为类保留这种名字。

窗体和组件

窗体(Window)也称为框架(Frame),它仅仅是wx.Frame类的实例。

wx框架中的部件都是由它们的父部件作为构造函数的第一个參数创建的。假设正在创建一个单独的窗体,就不须要考虑父部件。使用None就可以。并且在调用app.MainLoop()前须要调用窗体的Show方法——否则它会一直隐藏。

import wx

app=wx.App()

win=wx.Frame(None)

win.Show()

app.MainLoop()

运行结果:

添加button:

import wx

app=wx.App()

win=wx.Frame(None)

btn=wx.Button(win)

win.Show()

app.MainLoop()

运行结果:

标签、标题和位置

能够在创建部件的时候使用构造函数的label參数设定标签。用title设定标题。

import wx

app=wx.App()

win=wx.Frame(None,title="Simple Editor")

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

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

win.Show()

app.MainLoop()

运行结果:

应该有两个button,实际仅仅有一个是由于还有一个被隐藏掉了。

调节button位置:

import wx

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))

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

app.MainLoop()

运行结果:

更智能的布局

在调整窗体大小时。应该能保证窗体中的组件也会随之调整大小和位置。

在wx内进行布局的最简单方法是使用尺寸器(sizer),最easy使用的工具就是wx.BoxSizer。

import wx

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()

运行结果:

拉伸效果

事件处理

在GUI术语中,用户运行的动作叫做事件(event)。

让程序注意这些事件并作出反应。能够将函数绑定到所涉及的事件可能发生的组件上达到这个效果。当事件发生时。函数会被调用。利用部件的Bind方法能够将事件处理函数链接到给定的事件上。

完毕了的程序

代码:

import wx

def load(event):

file=open(filename.GetValue())

contents.SetValue(file.read())

file.close()

def save(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 输入地址,点击openbutton,以下显示文件内容。

2 在以下区域编辑后点击savebutton关闭程序。

3 运行1步骤可看到刚才编辑的效果。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

python基础课程_2学习笔记3:图形用户界面的更多相关文章

  1. python基础课程_学习笔记26:编程的乐趣

    编程的乐趣 编程柔术 当你坐下来,打算如何组织计划要定时,具体程序,然而,无论什么经验.在实现时间的函数的,你会逐渐学会了原来的设计,实用的新知识.我们不应该忽视沿途汲取的教训,相反,它们用于其他设计 ...

  2. python基础课程_学习笔记15:标准库:有些收藏夹——fileinput

    标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...

  3. python基础课程_学习笔记13:标准库:有些收藏夹——sys

    标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...

  4. python基础课程_学习笔记21:文件和材料

    文件和材料 打开文件 open功能是用来打开文件,语法例如,下面的: open([name[,mode[,buffering]]) open函数使用一个文件名称作为唯一的强制參数,然后返回一个文件对象 ...

  5. python基础课程_学习笔记20:标准库:有些收藏夹——os

    标准库:有些收藏夹 os os模块为您提供访问多个操作系统服务特征. os和它的子模块os.path还包含一些用于检查.构造.删除文件夹和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和 ...

  6. python基础教程_学习笔记14:标准库:一些最爱——re

    标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...

  7. Python学习笔记007_图形用户界面[EasyGui][Tkinter]

    EasyGui官网:http://easygui.sourceforge.net/ EasyGui最新版:easygui-0.97.rar 小甲鱼根据官网文档翻译之后的中文文档地址: http://b ...

  8. python基础教程_学习笔记12:充电时刻——模块

    充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...

  9. python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36201499 标准库:一些最爱 集合.堆和双端队 ...

随机推荐

  1. HDU 3480 DP+斜率优化

    题意:给你n个数字,然后叫你从这些数字中选出m堆,使得每一堆的总和最小,一堆的总和就是这一堆中最大值减去最小值的平方,最后要使得所有堆加起来的总和最小. 思路:对这些数字排序之后,很容易想到DP解法, ...

  2. java.io.EOFException解决

    主要错误提演示样例如以下: 严重: IOException while loading persisted sessions: java.io.EOFException 严重: Exception l ...

  3. VC++ WIN32 sdk实现按钮自绘详解 之二(关键是BS_OWNERDRAW和WM_DRAWITEM)

    网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片:    首先建立一个标准的Win32 Application 工程.选择a simple Wi ...

  4. SAP自带的创建报表工具

    SAP自带的工具有quickview和query两个主要的工具,当然还有其他的 quickview和query的区别主要是query支持系统之间的传输,quickview只能是用户的客户端创建使用,不 ...

  5. smartforms长文本处理方式

    因为长文本的话不好换行,在smartforms中对于长文本的处理有两种:一种是自定义文本模板,自己定义好的文本格式,然后再使用的时候再文本类型中选择文本模板,最好是勾上如果没有文本存在怎无错误.这种方 ...

  6. MSYS2 环境搭建(在Qt Creator可以设置环境变量来进行引用这些库)

    本机环境:Windows XP 32位MSYS2地址:http://sourceforge.net/projects/msys2/ 下载32位版本,地址:http://sourceforge.net/ ...

  7. 提高mysql memory(heap) engine内存性能的开源补丁_XMPP Jabber即时通讯开发实践_百度空间

    提高mysql memory(heap) engine内存性能的开源补丁_XMPP Jabber即时通讯开发实践_百度空间 提高mysql memory(heap) engine内存性能的开源补丁

  8. [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)

    优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...

  9. fopen()功能

    1.2 文件输入和输出功能 键盘.显示器.打印机.磁盘驱动器和其他逻辑器件, 输入和输出可以通过文件管理方法可以完成. 最经常使用的编程是一个磁盘文件, 因此,这一部分主要是基于磁盘文件, 简介Tur ...

  10. Java IO学习笔记:概念与原理

    Java IO学习笔记:概念与原理   一.概念   Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...