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

app = App() #4
app.MainLoop() #5

上面的代码的任何一行都不能少,不然将不能工做。这个基本的wxPython程序说明了开发任一wxPython程序所必须的五个基本步骤:app

  1. 导入必须的wxPython
    一旦你导入了wx模块,你就可以建立你的应用程序(application)对象和框架(frame)对象。每一个wxPython程序必须有一个application对象和至少一个frame对象。application对象必须是wx.App的一个实例或你在OnInit()方法中定义的一个子类的一个实例。当你的应用程序启动的时候,OnInit()方法将被wx.App父类调用。框架

  2. 子类化wxPython应用程序类wx.App
    咱们一般在OnInit()方法中建立frame对象。上面的wx.Frame接受三个参数,仅第一个(parent=None)是必须的,其他的都有默认值。 调用Show()方法使frame可见,不然不可见。咱们能够经过给Show()一个布尔值参数来设定frame的可见性函数

  3. 定义一个应用程序的初始化方法
    咱们没有为咱们的应用程序类定义一个__init__()方法。在Python中,这就意味着父方法wx.App.__init()__将在对象建立时被自动调用。这是一个好的事情。若是你定义你本身的__init__()方法,不要忘了调用其基类的__init()__方法,如:
    class App(wx.App):
        def __init__(self):
    
            wx.App.__init__(self)

     若是你忘了这样作,wxPython将不被初始化而且你的OnInit()方法也将得不到调用。oop

  4. 建立一个应用程序类的实例
  5. 进入这个应用程序的主事件循环
    一旦进入主事件循环,控制权将转交给wxPythonwxPythonGUI程序主要响应用户的鼠标和键盘事件。当一个应用程序的全部框架被关闭后,这个app.MainLoop()方法将返回且程序退出。

 扩展这个最小的空的wxPython程序

import wx

class Frame(wx.Frame):   #3
    pass

class App(wx.App):

    def OnInit(self):
        self.frame = Frame(parent=None, title='Spare')   #4
        self.frame.Show()
        self.frame.Center()
        self.SetTopWindow(self.frame)   #5
        return True

if __name__ == '__main__':   #6
    app = App()
    app.MainLoop()
  1.  咱们改变了建立frame对象的方法。bare版的程序简单地建立了一个wx.Frame类的实例。在spare版中,咱们定义了咱们本身的Frame类做为wx.Frame的子类。此时,最终的结果没有什么不一样,可是若是你想在你的框架中显示诸如文本、按钮、菜单的话,你可能就想要你本身的Frame类了。
  2. 咱们将对frame实例的引用做为应用程序实例的一个属性
  3. OnInit()方法中,咱们调用了这个App类本身的SetTopWindow()方法,并传递给它咱们新建立的frame实例。咱们没必要定义SetTopWindow()方法,由于它继承自wx.App父类。SetTopWindow()方法是一个可选的方法,它让wxPython方法知道哪一个框架或对话框将被认为是主要的。一个wxPython程序能够有几个框架,其中有一个是被设计为应用程序的顶级窗口的。测试

  4.  这个是Python中一般用来测试该模块是做为程序独立运行仍是被另外一模块所导入。咱们经过检查该模块的__name__属性来实现
    spa

建立最终的hello.py程序

import wx


class Frame(wx.Frame):   #2 wx.Frame子类
    """Frame class that displays an image."""

    def __init__(self, image, parent=None, id=-1,
                 pos=wx.DefaultPosition,
                 title='Hello, wxPython!'): #3图像参数
        """Create a Frame instance and display image."""
#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子类
    """Application class."""

    def OnInit(self):
#6 图像处理
        image = wx.Image('back_image.jpg', wx.BITMAP_TYPE_JPEG)
        self.frame = Frame(image)

        self.frame.Show()
        self.SetTopWindow(self.frame)
        return True

def main():  #7
    app = App()
    app.MainLoop()

if __name__ == '__main__':
     main() 

#2 定义一个wx.Frame的子类,以便咱们更容量控制框架的内容和外观。设计

#3 给咱们的框架的构造器增长一个图像参数。这个值经过咱们的应用程序类在建立一个框架的实例时提供。一样,咱们能够传递必要的值给wx.Frame.__init__()code

#4 咱们将用wx.StaticBitmap控件来显示这个图像,它要求一个位图。因此咱们转换图像到位图。咱们也使用图像的宽度和高度建立一个size元组。这个size元组被提供给wx.Frame.__init__()调用,以便于框架的尺寸匹配位图尺寸。对象

#5 定义一个带有OnInit()方法的wx.App的子类,这是wxPython应用程序最基本的要求。blog

#6 咱们使用与hello.py在同一目录下的名为wxPython.jpg的文件建立了一个图像对象。

#7 main()函数建立一个应用程序的实例并启动wxPython的事件循环。

相关文章
相关标签/搜索