wxpython_GUI学习笔记(5)——wx.Frame学习

【转载博主麦兜搞IT
:http://blog.sina.com.cn/s/blog_4b5039210100ez54.html】

因为笔记主要是摘自《wxpython in action》,很多名词我怕翻译不准,就直接用英文原文来代替,就像今天的top-level window object 和subwindow object ,这里暂时叫顶层窗口对象和子窗口对象。

    首先看一下wxpython的输出重定向,关于什么是标准输入输出和其对应的重定向,可以参看http://blog.sina.com.cn/s/blog_4b5039210100dtam.html或者到网上查找相关内容。下面以一个例子来说明。(这里虽然是讲重定向,但是我们的用意是看看一个标准的wxpython程序时怎么运行的,它的运行顺序是什么)

 

import wx

import sys

class Frame(wx.Frame):

    def __init__(self,parent,id,title):

        print "Frame__init__"

        wx.Frame.__init__(self,parent,id,title)

class App(wx.App):

    def __init__(self,redirect=True,filename=None):

        print "App__init__"

        wx.App.__init__(self,redirect,filename)

 

    def OnInit(self):

        print "OnInit"

        self.frame=Frame(parent=None,id=-1,title='Startup')

        self.frame.Show()

        self.SetTopWindow(self.frame)

        print >>sys.stderr,"A pretend error message"

        return True

    def OnExit(self):

        print "OnExit"

if __name__=='__main__':

    app=App(redirect=True)

    print "before MainLoop"

    app.MainLoop()

print "after MainLoop"

 

运行结果,出现两个窗口,一个是wxpython的frame,另一个就是我们把标准输出重定向到了一个wxpython窗口

 

 wxpython_GUI学习笔记(5)——wx.Frame学习_第1张图片

 

并且在命令行会出现下面的结果:

wxpython_GUI学习笔记(5)——wx.Frame学习_第2张图片

 

其中第一个是在frame产生前打印的,第二行是在我们关闭frame窗口后打印的。

从这个程序,我们基本能看出整个程序的运行顺序和步骤。

首先程序要运行的是建立应用类的实例app=App(redirect=True),然后就要进行这个子类的实现,而App是继承于wx..App,然后就自然要用到父类的__init__()方法,所以App__init__首先被打印出来,因为此时frame还没有产生,所以App__init__被打印在了命令行。然后进入OnInit方法,此时frame产生,然后就是Frame方法,然后进入MainLoop循环,结束以后,最后打印after MainLoop。

 

Top-level window object

    顶层窗口对象,就是不被任何其他组件包含的对象,相反,顶层窗口对象可以包含其他的组件,是我们程序的主窗口。一个应用必须至少一个top-level window object,它通常是wx.Frame的一个子类,也可以使wx.Dialog 的子类。

    通常我们用SetTopWindow()来设置某个frame或别的为top-level window object ,如果我们不设置,那么系统默认第一个frame为top-level window object

    Wx.Frame是所有frame对象的父类,下面简单看一下这个类。如何创建一个frame对象,前面已经说过,可以直接用wx.Frame()实现,或者先定义一个它的子类,再由子类来定义frame。

wx.Frame(parent,id=-1,title='',pos=wx.DefaultPostion,size=wx.DefaultSize,

style=wx.DEFAULT_FRAME_STYLE,name='frame')

    下面看看这几个参数:

Parent:当前窗口的父窗口,如果当前窗口时top-level window的话,则parent=None,如果不是顶层窗口,则它的值为所属frame的名字

Id:一个新窗口的id,一般我们都设为-1,这样wxpython会自动产生一个id。

Title:窗口的标题,在标题栏上显示的内容

Pos:它的值是一个wx.Point的对象,是一个元组,表示了窗口创建时的位置坐标

Size:它的值是一个wx.Size的对象,也是一个元组,表示了窗口的大小。

Style:窗口的风格,窗口有多种风格,我们可以用(|)来组合想要的风格,下面就详细看一下。(熟悉MFC的朋友应该觉得很眼熟)

1.       wx.CAPTION 增加一个title bar to the frame,用来显示title这个属性

2.       wx.CLOSE_BOX  增加一个关闭窗口的按钮

3.       wx.DEFAULT_FRAME_STYLE 这是个默认窗口风格,也是我们经常使用的,它其实是这样定义的:wx.MAXIMIZE_BOX| wx.MINIMIZE_BOX| wx.RESIZE_BORDER|wx.SYSTEM_MENU| wx.CAPTION| wx.CLOSE_BOX

4.       wx.FRAME_SHAPED

5.       wx.FRAME_TOOL_WINDOW

6.       wx.MAXIMIZE_BOX

7.       wx.MINIMIZE_BOX

8.       wx.RESIZE_BORDER

9.       wx.SIMPLE_BORDER

10.   wx_SYSTEM_MENU

下面是几个实例:

默认的

wxpython_GUI学习笔记(5)——wx.Frame学习_第3张图片

无最大化最小化按钮,边界不能拖动

wxpython_GUI学习笔记(5)——wx.Frame学习_第4张图片

 

wxpython_GUI学习笔记(5)——wx.Frame学习_第5张图片

 

 

 可以多尝试集中风格试试。

你可能感兴趣的:(学习网站)