码迷,mamicode.com
首页 > 编程语言 > 详细

python基础教程_学习笔记23:图形用户界面

时间:2014-07-16 16:32:40      阅读:323      评论:0      收藏:0      [点我收藏+]

标签:图形化   窗口   框架   事件   gui   

图形用户界面

丰富的平台

在编写Python GUI程序前,需要决定使用哪个GUI平台。

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

工具包

描述

Tkinter

使用Tk平台。很容易得到。半标准。

wxpython

基于wxWindows。跨平台越来越流行。

PythonWin

只能在Windows上使用。使用了本机的Windows GUI功能。

JavaSwing

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

PyGTK

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

PyQt

使用Qt平台,跨平台。

 

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

以下以wxPython为例。

下载和安装wxPython

下载地址:

http://wxpython.org/download.php

注意:如果python64位的,则必须选用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()

 

执行结果:

 bubuko.com,布布扣

 

增加按钮:

import wx

 

app=wx.App()

win=wx.Frame(None)

btn=wx.Button(win)

win.Show()

app.MainLoop()

执行结果:

 bubuko.com,布布扣

 

标签、标题和位置

可以在创建部件的时候使用构造函数的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()

 

执行结果:

 bubuko.com,布布扣

 

应该有两个按钮,实际只有一个是因为另一个被隐藏掉了。

 

 

调节按钮位置:

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

 

执行结果:

 bubuko.com,布布扣

 

更智能的布局

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

 

wx内进行布局的最简单方法是使用尺寸器(sizer),最容易使用的工具就是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()

 

执行结果:

 bubuko.com,布布扣

拉伸效果

 bubuko.com,布布扣

事件处理

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

 

输入地址,点击open按钮,下面显示文件内容。

在下面区域编辑后点击save按钮关闭程序。

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

 bubuko.com,布布扣

python基础教程_学习笔记23:图形用户界面,布布扣,bubuko.com

python基础教程_学习笔记23:图形用户界面

标签:图形化   窗口   框架   事件   gui   

原文地址:http://blog.csdn.net/signjing/article/details/37878097

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!