wxPython学习(2.wxPython类层次结构和第一个wxPython程序)

wxPython基础
    作为图形用户界面开发工具包,主要提供了如下GUI内容:
    1.窗口(一个容器,容纳其他控件)
    2.控件
    3.事件处理
    4.布局管理

    
wxPython类层次结构

 


wxPython界面构建层次结构

frame(顶级窗口)-->菜单栏
                               -->Panel(内容面板)-->StaticText(标签)
                                                                    -->...(其他子控件)

(顶级窗口中上面放置菜单栏ToolBar,下面放内容面板Panel,面板中还可以包含其他面板)                                   
(菜单栏不放在内容面板中,内容面板主要放一些其他控件)
parent参数指向其父容器,即将其放在什么容器中,体现一种包含关系,而不是继承关系        

(参考下面程序3.使用面板)


第一个wxPython程序


1.步骤
#(1)引入wx模块
import wx
#(2)创建应用程序对象
app = wx.App()
#(3)创建窗口对象
frm = wx.Frame(None,title="第一个GUI程序",size=(400,300),pos=(100,100))
#pos位置,size窗口大小,title标题
#(4)显示窗口
frm.Show()
#(5)进入主事件循环(一种事件处理机制,大部分只有将当前应用程序放到主事件循环中才能展示界面,响应事件)
app.MainLoop()


2.自定义窗口类MyFrame
代码:
import wx
#自定义窗口类MyFrame
class MyFrame(wx.Frame):

    def __init__(self):
        super().__init__(parent=None,title="第一个GUI程序",size=(400,300),pos=(100,100))
        #自定义frame,然后让它继承wxFrame,并提供构造方法

#应用程序对象自定义,可以捕获应用程序生命周期
class App(wx.App):

    def OnInit(self):
        #创建窗口对象
        frame = MyFrame()
        frame.Show()
        return True
    
    def OnExit(self):
        print('应用程序退出')
        return 0
    
#当前模块名是不是主模块,即应用程序的入口  
if __name__ == '__main__':
    app = App()#调用上面函数
    app.MainLoop()#进入主事件循环
    
#上面没有放一个容器进去



3.使用面板
代码:
import wx
#自定义窗口类MyFrame
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None,title="第一个GUI程序",size=(400,300),pos=(100,100))
        #自定义frame,然后让它继承wxFrame,并提供构造方法
        self.Centre()#设置窗口居中
        
        #在frame中放一个面板,把其他控件和窗口放到面板中去
        panel = wx.Panel(parent=self)
        #把面板添加到某一个容器/窗口中,就让parent指向谁。parent为父容器/父窗口,self为当前的frame
        statictext = wx.StaticText(parent=panel,label='hello world',pos=(10,10))
        #放一个静态文本框,相当于label,放到panel中,所以parent=panel,pos为位置
        

        
#应用程序对象自定义,可以捕获应用程序生命周期
class App(wx.App):
    def OnInit(self):
        #创建窗口对象
        frame = MyFrame()
        frame.Show()
        return True
    
    def OnExit(self):
        print('应用程序退出')
        return 0
    
#当前模块名是不是主模块,即应用程序的入口  
if __name__ == '__main__':
    app = App()#调用上面函数
    app.MainLoop()#进入主事件循环


 

posted @ 2019-04-18 19:35  highlightyys  阅读(24)  评论(0编辑  收藏  举报