Wxpython入门

Wxpython入门

入门示例

import wx#1

class App(wx.App):#2
    def OnInit(self):#3
        frame=wx.Frame(parent=None,title ='Bare')
        frame.Show()
        return True
if __name__=="__main__":
    app = App(0)#4
    app.MainLoop()#5
上面的代码的任何一行都不能少,否则将不能工作。这个基本的wxPython 程序说明了开发任一wxPython程序所必须的五个基本步骤:
1、导入必须的wxPython包     
2、子类化wxPython应用程序类     
3、定义一个应用程序的初始化方法     
4、创建一个应用程序类的实例     
5、进入这个应用程序的主事件循环

  

导入wxPython

你需要做的第一件事就是导入这个主要的wxPython包,这个包名为wx:
import wx
一旦这个包被导入,你就可以引用wxPython的类、函数和常量(它们以wx 为前缀)。
分析

使用应用程序和框架工作

一旦你导入了wx模块,你就能够创建你的应用程序(application)对象和 框架(frame)对象。每个wxPython程序必须有一个application对象和至少一个 frame对象。application对象必须是wx.App的一个实例或你在OnInit()方法中定义 的一个子类的一个实例。当你的应用程序启动的时候,OnInit()方法将被 wx.App父类调用。
子类化wxPython application类
下面的代码演示了如何定义我们的wx.App的子类:
class MyApp(wx.App): 
    def OnInit(self):
          frame = wx.Frame(parent=None, id=-1, title=”Bare”)
          frame.Show()
          return True 
上面我们定义了一个名为MyApp的子类。我们通常在OnInit()方法中创建 frame对象。上面的wx.Frame接受三个参数,仅第一个是必须的,其余的都有默 认值。 调用Show()方法使frame可见,否则不可见。我们可以通过给Show()一个布 尔值参数来设定frame的可见性:
frame.Show(False)  # 使框架不可见. 
frame.Show(True)   # True是默认值,使框架可见. 
frame.Hide()       # 等同于frame.Show(False)
定义一个应用程序的初始化方法
注意:我们没有为我们的应用程序类定义一个__init__()方法。在Python中,这就意 味着父方法wx.App.__init()__将在对象创建时被自动调用。这是一个好的事情。如果 你定义你自己的__init__()方法,不要忘了调用其基类的__init()__方法,示例如下:
class App(wx.App):
      def __init__(self):
                   wx.App.__init__(self) 
如果你忘了这样做,wxPython不将被初始化并且你的OnInit()方法也不将得到调用。
创建一个应用程序实例并进入它的主事件循环
这步是创建wx.App子类的实例,并调用它的MainLoop()方法:
app = App() 
app.MainLoop()
一旦进入主事件循环,控制权将转交给wxPython。wxPython GUI程序主要 响应用户的鼠标和键盘事件。当一个应用程序的所有框架被关闭后,这个 app.MainLoop()方法将返回且程序退出。 
分析

 扩展入门示例

#!/usr/bin/env python   #1
'''Spare.py is a starting point for a wxPython program.''' #2

import wx#1

class Frame(wx.Frame):#3     
    pass
class App(wx.App):#2
    def OnInit(self):#3
        self.frame=wx.Frame(parent=None,title ='Spare')#4
        self.SetTopWindow(self.frame)# 5
        self.frame.Show()
        return True
if __name__=="__main__":#6
    app = App(0)
    app.MainLoop()
#1 这行看似注释,但是在如linux和unix等操作系统上,它告诉操作系统如 何找到执行程序的解释器。如果这个程序被给予的可执行权限(例如使用 chmod命令),我们可以在命令行下仅仅键入该程序的名字来运行这个程序:
% spare.py
这行在其它的操作系统上将被忽略。但是包含它可以实现代码的跨平台。

#2 这是文档字符串,当模块中的第一句是字符串的时候,这个字符串就成 了该模块的文档字符串并存储在该模块的__doc__属性中。你能够在你的代码 中、某些开发平台、甚至交互模式下运行的Python解释器中访问文档字符串:
>>> import spare
>>> print spare.__doc__ 
Spare.py is a starting point for simple wxPython programs.
>>> 
#3 我们改变了你们创建frame对象的方法。bare版的程序简单地创建了一个 wx.Frame类的实例。在spare版中,我们定义了我们自己的Frame类作为 wx.Frame的子类。此时,最终的结果没有什么不同,但是如果你想在你的框架 中显示诸如文本、按钮、菜单的话,你可能就想要你自己的Frame类了。

#4 我们将对frame实例的引用作为应用程序实例的一个属性。

#5 在OnInit()方法中,我们调用了这个App类自己的SetTopWindow()方法, 并传递给它我们新创建的frame实例。我们不必定义SetTopWindow()方法,因为 它继承自wx.App父类。SetTopWindow()方法是一个可选的方法,它让wxPython 方法知道哪个框架或对话框将被认为是主要的。一个wxPython程序可以有几个 框架,其中有一个是被设计为应用程序的顶级窗口的。

#6 这个是Python中通常用来测试该模块是作为程序独立运行还是被另一模 块所导入。我们通过检查该模块的__name__属性来实现:
if __name__ == ’__main__’:
     app = App()
     app.MainLoop() 
分析

显示图像的例子

#!/usr/bin/env python   

import wx

class Frame(wx.Frame): #2 wx.Frame子类
    # 3图像参数
    def __init__(self,image,parent = None,id = -1,pos = wx.DefaultPosition,title ='Hello, wxPython!'):
     # 4 显示图像
         temp=image.ConvertToBitmap()
         size=temp.GetWidth(),temp.GetHeight()
         wx.Frame.__init__(self,parent,id,title,pos,size)
         self.bmp=wx.StaticBitmap(parent=self,bitmap =temp)

class App(wx.App): #5 wx.App子类 
    # 6 图像处理 
    def OnInit(self):
        image=wx.Image('back1.jpg',wx.BITMAP_TYPE_JPEG)
        self.frame=wx.Frame(image)
        self.frame.Show()
        self.SetTopWindow(self.frame)

        return True
if __name__=="__main__": #7        
    app = App(0)
    app.MainLoop()
说明:
#2 定义一个wx.Frame的子类,以便我们更容量控制框架的内容和外观。
#3 给我们的框架的构造器增加一个图像参数。这个值通过我们的应用程序 类在创建一个框架的实例时提供。同样,我们可以传递必要的值 wx.Frame.__init__()
#4 我们将用wx.StaticBitmap控件来显示这个图像,它要求一个位图。所以 我们转换图像到位图。我们也使用图像的宽度和高度创建一个size元组。这个 size元组被提供给wx.Frame.__init__()调用,以便于框架的尺寸匹配位图尺寸。
#5 定义一个带有OnInit()方法的wx.App的子类,这是wxPython应用程序最 基本的要求。
#6 我们使用与hello.py在同一目录下的名为back1.jpg的文件创建了一个 图像对象。 
#7 main()函数创建一个应用程序的实例并启动wxPython的事件循环。

猜你喜欢

转载自www.cnblogs.com/-wenli/p/10661680.html
今日推荐