• wxPython学习笔记(一)


    wxPython程序由两个必要的对象组成,应用对象APP和顶级窗口对象Frame

    • 应用程序对象APP管理主事件循环MainLoop()
    • 顶级窗口对象Frame管理数据,控制并呈现给用户

    1344950345_6075

    先看一段最简单的代码:

    import wx
    
    class App(wx.App):
        
        def OnInit(self):
            frame = wx.Frame(parent = None, title = 'Kobe')
            frame.Show()
            return True
    
    app = App()
    app.MainLoop()

    上面的代码说明了开发wxPython程序必须的5个步骤:

      1. 1. 导入wxPython包
      2. 2. 子类化wxPython应用类
      3. 3. 定义应用程序的初始化方法
      4. 4. 创建一个应用程序类的实例
      5. 5. 进入这个应用程序的主事件循环(MainLoop())
      6. OnInit()方法没有参数,返回值为BOOL,此部分可以做一些关键数据初始化的动作,如果失败,返回False,程序退出。通常会在此方法中创建一个Frame对象,并调用Frame的Show()方法。
      7. 应用程序对象开始于实例被创建时,结束于最后一个应用程序窗口被关闭,与Python脚本开始执行没有先后关系。
      8. 1344950412_3412
      9. 每个wxPython程序必须有一个application对象和至少一个frame对象。application对象必须是wx.App的一个实例或在OnInit()方法中定义的一个子类的一个实例,当程序启动时,OnInit()方法将被wx.App父类调用。
      10. 上面的代码中,定义了名为MyApp的子类,在OnInit()方法中创建frame对象。
      11. wx.Frame(self, parent, id, title, pos, size, style, name)
        其中,只有parent是必须的,其余都有默认值,返回值为空。下面是其各个参数的类型:
      parent (type=Window)
      id    (type=int)
      pos      (type=Point)
      size    (type=Size)
      style  (type=long)
      name   (type=String)
      Returns: bool

    调用Show()方法使frame可见,否则不可见。可以通过给Show一个布尔值参数来设定frame的可见性:

    frame.Show(False)    # 框架不可见
    frame.Show(True)     # 框架可见
    frame.Hide()         # 等同于frame.Show(False)

    该程序并没有定义一个__init__()方法,意味着父方法wx.App.__init()__将在对象创建时被自动调用。若自己定义__init__()方法,还需要调用其基类的__init__()方法。

    class App(wx.APP):
        def __init__(self):
            wx.APP.__init__(self)

    如果没有这样做, wxPython将不被初始化,并且OnInit()方法也不会调用

    当程序进入主循环后,控制权将转交给wxPython。wxPython GUI程序主要响应用户的鼠标和键盘事件。当一个应用程序的所有框架被关闭后,app.MainLoop()方法将返回,程序退出。

    import wx
    
    
    class Frame(wx.Frame):
        
        def __init__(self, image, parent=None, id =-1,
                     pos = wx.DefaultPosition, 
                     title = 'Hello, wxPython!'):
            
            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):
        
        def OnInit(self):
            image = wx.Image('wxPython.jpg', wx.BITMAP_TYPE_JPEG)
            self.frame = Frame(image)
            
            self.frame.Show()
            self.SetTopWindow(self.frame)
            return True
    
    def main():
        app = App()
        app.MainLoop()
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    俩人搞对象,山上骑马
    历史不会偏袒任何一个缺乏正义、良知的人。
    力量和对力量的控制
    超级管理员
    电信F412
    prim算法
    Maven pom.xml配置详解
    PorterDuffXfermode的用法
    使用MaskFilter
    Android drawText获取text宽度的三种方式
  • 原文地址:https://www.cnblogs.com/roicel/p/2944833.html
Copyright © 2020-2023  润新知