zoukankan      html  css  js  c++  java
  • 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程序所必须的五个基本步骤:

    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()方法也将得不到调用。

    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__属性来实现

    创建最终的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__()

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

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

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

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

  • 相关阅读:
    C#值类型和引用类型的不同
    C# new用法总结-转
    C#中New关键词的几种用法
    命令行客户端MySQL的使用(1)——Python
    数据库的基本使用——MySQL
    生成器的创建方式——Python
    with与“上下文管理器”——Python
    魔法属性——Python
    property属性——Python
    正则匹配之贪婪和非贪婪——Python
  • 原文地址:https://www.cnblogs.com/ziv-chan/p/5516252.html
Copyright © 2011-2022 走看看