Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8608809
  • 博文数量: 1413
  • 博客积分: 11128
  • 博客等级: 上将
  • 技术积分: 14685
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-13 10:03
个人简介

follow my heart...

文章分类

全部博文(1413)

文章存档

2013年(1)

2012年(5)

2011年(45)

2010年(176)

2009年(148)

2008年(190)

2007年(293)

2006年(555)

分类: Python/Ruby

2007-03-30 10:02:48

首先说明的一点是,我的wxPython不仅仅是为了学习wxPython,而且还在学习python,我只是希望通过这样一个框架,把这两部分东西学好.
下面是一段比较完整的代码,我只写一点值得我注意的地方.
 

import wx
import os
ID_ABOUT=101
ID_OPEN=102
ID_BUTTON1=110
ID_EXIT=200
class MainWindow(wx.Frame):
    def __init__(self,parent,id,title):
        self.dirname=''
        wx.Frame.__init__(self,parent,wx.ID_ANY, title)
        self.control = wx.TextCtrl(self, 1, style=wx.TE_MULTILINE)
        self.CreateStatusBar() # A Statusbar in the bottom of the window
        # Setting up the menu.
        filemenu= wx.Menu()
        filemenu.Append(ID_OPEN, "&Open"," Open a file to edit")
        filemenu.AppendSeparator()
        filemenu.Append(ID_ABOUT, "&About"," Information about this program")
        filemenu.AppendSeparator()
        filemenu.Append(ID_EXIT,"E&xit"," Terminate the program")
        # Creating the menubar.
        menuBar = wx.MenuBar()
        menuBar.Append(filemenu,"&File") # Adding the "filemenu" to the MenuBar
        self.SetMenuBar(menuBar) # Adding the MenuBar to the Frame content.
        wx.EVT_MENU(self, ID_ABOUT, self.OnAbout)
        wx.EVT_MENU(self, ID_EXIT, self.OnExit)
        wx.EVT_MENU(self, ID_OPEN, self.OnOpen)
        self.sizer2 = wx.BoxSizer(wx.HORIZONTAL)
        self.buttons=[]
        for i in range(0,6):
            self.buttons.append(wx.Button(self, ID_BUTTON1+i, "Button &"+`i`))
            self.sizer2.Add(self.buttons[i],1,wx.EXPAND)
        # Use some sizers to see layout options
        self.sizer=wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.control,1,wx.EXPAND)
        self.sizer.Add(self.sizer2,0,wx.EXPAND)
        #Layout sizers
        self.SetSizer(self.sizer)
        self.SetAutoLayout(1)
        self.sizer.Fit(self)
        self.Show(1)
    def OnAbout(self,e):
        d= wx.MessageDialog( self, " A sample editor \n"
                            " in wxPython","About Sample Editor", wx.OK)
                            # Create a message dialog box
        d.ShowModal() # Shows it
        d.Destroy() # finally destroy it when finished.
    def OnExit(self,e):
        self.Close(True) # Close the frame.
    def OnOpen(self,e):
        """ Open a file"""
        dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", wx.OPEN)
        if dlg.ShowModal() == wx.ID_OK:
            self.filename=dlg.GetFilename()
            self.dirname=dlg.GetDirectory()
            f=open(os.path.join(self.dirname, self.filename),'r')
            self.control.SetValue(f.read())
            f.close()
        dlg.Destroy()
app = wx.PySimpleApp()
frame = MainWindow(None, -1, "Sample editor")
app.MainLoop()

 

import段是对库的引用,这里包含了一个wx,一个OS,wx自然是对wxWidgets框架的引用,而OS自然是对操作系统的一些东东的引用.
ID_XXX是资源标识,这和许多语言是相似的.
接下来定义了一个框架frame,很显然,这个框架是继承自wx.Frame的.
然后就是初始化了,注意,这里应该是一个段.框架初始化的格式是这样的:
__init__(self, parent, id, title, pos, size, style, name)
我们注意到,python是没有{}的扩号的,他是以缩进和:冒号进行判别的.也就是我们看到,在class后面的:下面语句的缩进说明他们是一体的,而def后面的缩进也是一体的,def语句对应后面也有冒号。
设置菜单我就不多说了,这里其实做了三步,第一步是file菜单的定义和加载菜单项,第二步是定义了菜单栏,并将file菜单添加至菜单栏,第三步是将菜单栏设置到frame.
接下来是将菜单与相应的事件相关联,用wx.EVT_MENU进行。
然后是一个按钮的布局,不多说了。
再说一下事件,事件的定义这种方式还是让人容易接受的,用def来定义一个事件,然后在函数体里面加入相应的语句,注意,还是复合语句,用:开始,缩进结束,所以可以看到,python对缩进的要求还是挺严格的。昨天好像在试着,缩进有问题的话程序会执行错误,这一点要注意,不比C语言,你随便写就是了。
最后说一下app,这里用wx.PySimpleApp表示,注意PySimpleApp是一个简单的应用类。你可以创建他并把他做为最上端的窗口。并且不必担心初始化,下面再给出最简单的wxPython程序,我们看到,我们都不需要来进行初始化了,这个例子够简单吧。总之我们看到,一个wxPython主要由两个部分组成,一个是app,一个是frame,这是初学的一些看法,肯定有不对的地方,还在不断学习中...
 

import wx
app = wx.PySimpleApp()
frame = wx.Frame(None, wx.ID_ANY, "Hello World")
frame.Show(True)
app.MainLoop()

 

 

阅读(1896) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~