Tiknter例子3

发布时间:2019-08-28 09:07:10编辑:auto阅读(1623)

    1.两个子类,重定向输出


    运行效果:

    wKioL1Otie3wmV2sAADH-YUp8LU253.jpg

    ============================================

    代码部分:

    ============================================

    #!/usr/bin/env python
    #coding=utf-8
    import wx
    import sys
    
    class Frame(wx.Frame):
    
        def __init__(self, parent, id, title,size):
            print "Frame __init__"
            wx.Frame.__init__(self, parent, id, title,size)
    
    class App(wx.App):
    
        def __init__(self, redirect=True, filename=None):
            print "App __init__"
            wx.App.__init__(self, redirect, filename)
    
        def OnInit(self):
            print "OnInit"    #输出到stdout
            self.frame = Frame(parent=None, id=-1, title='Startup',size=(400,100))  #创建框架
            self.frame.Show()
            self.SetTopWindow(self.frame)
            print    sys.stderr, "A pretend error message"    #输出到stderr
            return True
    
        def OnExit(self):
            print "OnExit"
    
    if __name__ == '__main__':
        app = App(redirect=True) #1 文本重定向从这开始
        print "before MainLoop"
        app.MainLoop()  #2 进入主事件循环
        print "after MainLoop"


    2.单个图像建立在frame上


    运行效果:

    wKioL1OuRh6xIfx4AAHXxZXj8pU423.jpg

    ============================================

    代码部分:

    ============================================

    #!/usr/bin/env python
    
    """Hello, wxPython! program."""
    
    import wx
    
    
    class Frame(wx.Frame):   #2 wx.Frame子类
        """Frame class that displays an p_w_picpath."""
    
        def __init__(self, p_w_picpath, parent=None, id=-1,
                     pos=wx.DefaultPosition,
                     title='Hello, wxPython!'): #3图像参数
            """Create a Frame instance and display p_w_picpath."""
    #4 显示图像
            temp = p_w_picpath.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 图像处理
            p_w_picpath = wx.Image('pop.jpg', wx.BITMAP_TYPE_JPEG)
            self.frame = Frame(p_w_picpath)
    
            self.frame.Show()
            self.SetTopWindow(self.frame)
            return True
    
    def main():  #7
        app = App()
        app.MainLoop()
    
    if __name__ == '__main__':
         main()


    3.多个图像(wx.FlexGridSizer)建立在panel上


    运行效果:

    wKioL1OuSMqBRe2iAAQibMAVzHw049.jpg

    ============================================

    代码部分:

    ============================================

    #coding=utf-8
    import wx
    
    filenames = ["D:\pop.jpg", "D:\pop.png" ]
    
    class TestFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None, title="Loading Images")
            p = wx.Panel(self)
    
            fgs = wx.FlexGridSizer(cols=2, hgap=10, vgap=10)
            for name in filenames:
                #1 从文件载入图像
                img1 = wx.Image(name, wx.BITMAP_TYPE_ANY)
    
                # Scale the oiginal to another wx.Image
                w = img1.GetWidth()
                h = img1.GetHeight()
                img2 = img1.Scale(w/2, h/2)#2 缩小图像
    
                #3 转换它们为静态位图部件
                sb1 = wx.StaticBitmap(p, -1, wx.BitmapFromImage(img1))
                sb2 = wx.StaticBitmap(p, -1, wx.BitmapFromImage(img2))
    
                # and put them into the sizer
                fgs.Add(sb1)
                fgs.Add(sb2)
    
            p.SetSizerAndFit(fgs)
            self.Fit()
    
    
    app = wx.PySimpleApp()
    frm = TestFrame()
    frm.Show()
    app.MainLoop()


    3.工具栏


    运行效果:

    wKiom1O12djxkT-_AABIZOSOXvU929.jpg

    ============================================

    代码部分:

    ============================================

    #!/usr/bin/env python
    # FileName: toolbar.py
    import wx
    import wx.py.p_w_picpaths as p_w_picpaths
    
    class MyToolBar( wx.Frame ):
        def __init__( self, parent, ID, title ):
            wx.Frame.__init__( self, parent, ID, title, wx.DefaultPosition, wx.Size( 350, 250 ) )
    
            vbox = wx.BoxSizer( wx.VERTICAL )
            toolbar = wx.ToolBar( self, -1, style=wx.TB_HORIZONTAL | wx.NO_BORDER )
            toolbar.AddSimpleTool( 1, p_w_picpaths.getPyBitmap(), 'New', '' )
            toolbar.AddSimpleTool( 2, p_w_picpaths.getPyBitmap(), 'Opne', '' )
            toolbar.AddSimpleTool( 3, p_w_picpaths.getPyBitmap(), 'Save', '' )
            toolbar.AddSeparator()
            toolbar.AddSimpleTool( 4, p_w_picpaths.getPyBitmap(), 'Exit', '' )
            toolbar.Realize()
    
            vbox.Add( toolbar, 0, border=5 )
            self.SetSizer( vbox )
            self.statusbar = self.CreateStatusBar()
    
            self.Centre()
    
            wx.EVT_TOOL( self, 1, self.OnNew )
            wx.EVT_TOOL( self, 2, self.OnOpen )
            wx.EVT_TOOL( self, 3, self.OnSave )
            wx.EVT_TOOL( self, 4, self.OnExit )
    
        def OnNew( self, event ):
            self.statusbar.SetStatusText( 'New Command' )
    
        def OnOpen( self, event ):
            self.statusbar.SetStatusText( 'Open Command' )
    
        def OnSave( self, event ):
            self.statusbar.SetStatusText( 'Save Command' )
    
        def OnExit( self, event ):
            self.Close()
    
    class MyApp( wx.App ):
        def OnInit(self):
            frame = MyToolBar( None, -1, ' toolbar.py' )
            frame.Show( True )
            return True
    
    app = MyApp( 0 )
    app.MainLoop()


    4.添加一个工具栏到sketch应用程序


    运行效果:

    wKiom1O2kZDR5LxYAACf-eTassM680.jpg

    ============================================

    代码部分:

    ============================================

    import wx
    from example1 import SketchWindow
    import wx.py.p_w_picpaths as p_w_picpaths
    
    #img1 = ["D:\book.png" ]
    
    class SketchFrame(wx.Frame):
        def __init__(self, parent):
            wx.Frame.__init__(self, parent, -1, "Sketch Frame",
                    size=(800,600))
            self.sketch = SketchWindow(self, -1)
            self.sketch.Bind(wx.EVT_MOTION, self.OnSketchMotion)
            self.initStatusBar() #1 这里因重构有点变化
            self.createMenuBar()
            self.createToolBar()
            #self.createSimpleTool()
    
        def initStatusBar(self):
            self.statusbar = self.CreateStatusBar()
            self.statusbar.SetFieldsCount(3)
            self.statusbar.SetStatusWidths([-1, -2,-3])
    
        def OnSketchMotion(self, event):
            self.statusbar.SetStatusText("Pos: %s" %
                    str(event.GetPositionTuple()), 0)
            self.statusbar.SetStatusText("Current Pts: %s" %
                    len(self.sketch.curLine), 1)
            self.statusbar.SetStatusText("Line Count: %s" %
                    len(self.sketch.lines), 2)
            event.Skip()
    
        def menuData(self): #2 菜单数据
            return [(" 菜单", (
                        (" New", "New Sketch file", self.OnNew),
                        (" Open", "Open sketch file", self.OnOpen),
                        (" Save", "Save sketch file", self.OnSave),
                        ("", "", ""),
                        ("abc ", (
                            ("dragon1 ", "", self.OnColor,
                               wx.ITEM_RADIO),
                            ("dragon2 ", "", self.OnColor,
                               wx.ITEM_RADIO),
                            ("dragon3 ", "", self.OnColor,
                               wx.ITEM_RADIO),
                            ("dragon4 ", "", self.OnColor,
                               wx.ITEM_RADIO))),
                        ("", "", ""),
                        (" Quit", "Quit", self.OnCloseWindow)))]
    
        def createMenuBar(self):
            menuBar = wx.MenuBar()
            for eachMenuData in self.menuData():
                menuLabel = eachMenuData[0]
                menuItems = eachMenuData[1]
                menuBar.Append(self.createMenu(menuItems), menuLabel)
            self.SetMenuBar(menuBar)
    
        def createMenu(self, menuData):
            menu = wx.Menu()
    #3 创建子菜单
            for eachItem in menuData:
                if len(eachItem) == 2:
                    label = eachItem[0]
                    subMenu = self.createMenu(eachItem[1])
                    menu.AppendMenu(wx.NewId(), label, subMenu)
    
                else:
                    self.createMenuItem(menu, *eachItem)
            return menu
    
        def createMenuItem(self, menu, label, status, handler,
                           kind=wx.ITEM_NORMAL):
            if not label:
                menu.AppendSeparator()
                return
            menuItem = menu.Append(-1, label, status, kind)#4 使用kind创建菜单项
            self.Bind(wx.EVT_MENU, handler, menuItem)
    
        def OnNew(self, event): pass
        def OnOpen(self, event): pass
        def OnSave(self, event): pass
    
        def OnColor(self, event):#5 处理颜色的改变
            menubar = self.GetMenuBar()
            itemId = event.GetId()
            item = menubar.FindItemById(itemId)
            color = item.GetLabel()
            self.sketch.SetColor(color)
    
        def OnCloseWindow(self, event):
            self.Destroy()
    
    
        def createToolBar(self):#1创建工具栏
            toolbar = self.CreateToolBar()
            for each in self.toolbarData():
                    self.createSimpleTool(toolbar, *each)
                    toolbar.AddSeparator()
            for each in self.toolbarColorData():
                    self.createColorTool(toolbar, each)
                    toolbar.Realize()#2 显现工具栏
    
        def createSimpleTool(self, toolbar, label, filename,help, handler):#3 创建常规工具
            if not label:
                    toolbar.AddSeparator()
                    return
            bmp = p_w_picpaths.getPyBitmap()
            tool = toolbar.AddSimpleTool(-1, bmp, label, help)
            self.Bind(wx.EVT_MENU, handler, tool)
    
        def toolbarData(self):
            
            return (("New", "a", "Create new sketch",self.OnNew),
                    ("", "", "", ""),
                    ("Open", "b", "Open existing sketch",self.OnOpen),
                    ("Save", "c", "Save existing sketch",self.OnSave))
    
        def createColorTool(self, toolbar, color):#4 创建颜色工具
            bmp = self.MakeBitmap(color)
            newId = wx.NewId()
            tool = toolbar.AddRadioTool(-1, bmp, shortHelp=color)
            self.Bind(wx.EVT_MENU, self.OnColor, tool)
    
        def MakeBitmap(self, color):#5 创建纯色的位图
            bmp = wx.EmptyBitmap(16, 15)
            dc = wx.MemoryDC()
            dc.SelectObject(bmp)
            dc.SetBackground(wx.Brush(color))
            dc.Clear()
            dc.SelectObject(wx.NullBitmap)
            return bmp
    
        def toolbarColorData(self):
            return ("Black", "Red", "Green", "Blue")
    
        def OnColor(self, event):#6 改变画笔颜色以响应工具栏的敲击
            menubar = self.GetMenuBar()
            itemId = event.GetId()
            item = menubar.FindItemById(itemId)
            if not item:
                toolbar = self.GetToolBar()
                item = toolbar.FindById(itemId)
                color = item.GetShortHelp()
            else:
                color = item.GetLabel()
                self.sketch.SetColor(color)
    
    
    
    if __name__ == '__main__':
        app = wx.PySimpleApp()
        frame = SketchFrame(None)
        frame.Show(True)
        app.MainLoop()

    附件:example1

    #coding=utf-8
    import wx
    
    class SketchWindow(wx.Window):
        def __init__(self, parent, ID):
            wx.Window.__init__(self, parent, ID)
            self.SetBackgroundColour("White")
            self.color = "Black"
            self.thickness = 1
            self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)#1 创建一个wx.Pen对象
            self.lines = []
            self.curLine = []
            self.pos = (0, 0)
            self.InitBuffer()
    
    #2 连接事件
            self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
            self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
            self.Bind(wx.EVT_MOTION, self.OnMotion)
            self.Bind(wx.EVT_SIZE, self.OnSize)
            self.Bind(wx.EVT_IDLE, self.OnIdle)
            self.Bind(wx.EVT_PAINT, self.OnPaint)
    
        def InitBuffer(self):
            size = self.GetClientSize()
    
    #3 创建一个缓存的设备上下文
            self.buffer = wx.EmptyBitmap(size.width, size.height)
            dc = wx.BufferedDC(None, self.buffer)
    
    #4 使用设备上下文
            dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
            dc.Clear()
            self.DrawLines(dc)
    
            self.reInitBuffer = False
    
        def GetLinesData(self):
            return self.lines[:]
    
        def SetLinesData(self, lines):
            self.lines = lines[:]
            self.InitBuffer()
            self.Refresh()
    
        def OnLeftDown(self, event):
            self.curLine = []
            self.pos = event.GetPositionTuple()#5 得到鼠标的位置
            self.CaptureMouse()#6 捕获鼠标
    
        def OnLeftUp(self, event):
            if self.HasCapture():
                self.lines.append((self.color,
                                   self.thickness,
                                   self.curLine))
                self.curLine = []
                self.ReleaseMouse()#7 释放鼠标
    
        def OnMotion(self, event):
            if event.Dragging() and event.LeftIsDown():#8 确定是否在拖动
                dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)#9 创建另一个缓存的上下文
                self.drawMotion(dc, event)
            event.Skip()
        #10 绘画到设备上下文
        def drawMotion(self, dc, event):
            dc.SetPen(self.pen)
            newPos = event.GetPositionTuple()
            coords = self.pos + newPos
            self.curLine.append(coords)
            dc.DrawLine(*coords)
            self.pos = newPos
    
        def OnSize(self, event):
            self.reInitBuffer = True #11 处理一个resize事件
    
        def OnIdle(self, event):#12 空闲时的处理
            if self.reInitBuffer:
                self.InitBuffer()
                self.Refresh(False)
    
        def OnPaint(self, event):
            dc = wx.BufferedPaintDC(self, self.buffer)#13 处理一个paint(描绘)请求
    
        #14 绘制所有的线条
        def DrawLines(self, dc):
            for colour, thickness, line in self.lines:
                pen = wx.Pen(colour, thickness, wx.SOLID)
                dc.SetPen(pen)
                for coords in line:
                    dc.DrawLine(*coords)
    
        def SetColor(self, color):
            self.color = color
            self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
    
        def SetThickness(self, num):
            self.thickness = num
            self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
    
    
    class SketchFrame(wx.Frame):
        def __init__(self, parent):
            wx.Frame.__init__(self, parent, -1, "Sketch Frame",
                    size=(800,600))
            self.sketch = SketchWindow(self, -1)
    
    if __name__ == '__main__':
        app = wx.PySimpleApp()
        frame = SketchFrame(None)
        frame.Show(True)
        app.MainLoop()


    5.wxPython实现折叠面板


    运行效果:

    wKiom1O3vSPD6GScAACePvzA9io077.jpg

    ============================================

    代码部分:

    ============================================

    #! /usr/bin/env python
    #coding=utf-8
    
    import wx
    
    class MyFrame(wx.Frame):
        def __init__(self, parent=None, title=u'折叠与展开'):
            wx.Frame.__init__(self, parent, -1, title=title)
            self.panel = wx.Panel(self, style=wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE)
            
            #增加一些控件:用户名密码部分,并使用GridBagSizer来管理这些控件
            self.label1=wx.StaticText(self.panel,-1,label=u'用户名:')
            self.label2=wx.StaticText(self.panel,-1,label=u'密     码:')
            self.userText=wx.TextCtrl(self.panel,-1,size=(200,25))
            self.passText=wx.TextCtrl(self.panel,-1,size=(200,25))
            self.rempassCheck=wx.CheckBox(self.panel,-1,label=u'记住密码')
            self.autologCheck=wx.CheckBox(self.panel,-1,label=u'自动登录')
            
            self.gbsizer1=wx.GridBagSizer(hgap=10, vgap=10)
            self.gbsizer1.Add(self.label1,pos=(0,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
            self.gbsizer1.Add(self.userText,pos=(0,1),span=(1,1),flag=wx.EXPAND)
            self.gbsizer1.Add(self.label2,pos=(1,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
            self.gbsizer1.Add(self.passText,pos=(1,1),span=(1,1),flag=wx.EXPAND)
            self.gbsizer1.Add(self.rempassCheck,pos=(2,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
            self.gbsizer1.Add(self.autologCheck,pos=(2,1),span=(1,1),flag=wx.ALIGN_CENTER|wx.ALIGN_CENTRE_VERTICAL)
            
            #增加一些控件:服务器设置部分,并使用GridBagSizer来管理这些控件,
            #然后再使用StaticBoxSizer管理GridBagSizer
            self.label3=wx.StaticText(self.panel,-1,label=u'地址:')
            self.label4=wx.StaticText(self.panel,-1,label=u'端口:')
            self.ipadText=wx.TextCtrl(self.panel,-1,size=(170,25))
            self.portText=wx.TextCtrl(self.panel,-1,size=(170,25))
            self.proxyBtn=wx.Button(self.panel,-1,label=u'代理\n设置')
            
            self.gbsizer2=wx.GridBagSizer(hgap=10,vgap=10)
            self.gbsizer2.Add(self.label3,pos=(0,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
            self.gbsizer2.Add(self.ipadText,pos=(0,1),span=(1,1),flag=wx.EXPAND)
            self.gbsizer2.Add(self.proxyBtn,pos=(0,2),span=(2,1),flag=wx.EXPAND)
            self.gbsizer2.Add(self.label4,pos=(1,0),span=(1,1),flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTRE_VERTICAL)
            self.gbsizer2.Add(self.portText,pos=(1,1),span=(1,1),flag=wx.EXPAND)
            
            sbox=wx.StaticBox(self.panel,-1,label=u'服务器')
            self.sbsizer=wx.StaticBoxSizer(sbox,wx.VERTICAL)
            self.sbsizer.Add(self.gbsizer2,proportion=0,flag=wx.EXPAND,border=10)
            
            #增加一些控件:最下方的按钮,并使用水平方向的BoxSizer来管理这些控件
            self.setserverBtn=wx.Button(self.panel,-1,label=u'服务器设置↓')
            self.loginBtn=wx.Button(self.panel,-1,label=u'登录')
            self.cancelBtn=wx.Button(self.panel,-1,label=u'取消')
            
            self.bsizer=wx.BoxSizer(wx.HORIZONTAL)
            self.bsizer.Add(self.setserverBtn,1,flag=wx.EXPAND)
            self.bsizer.Add(self.loginBtn)
            self.bsizer.Add(self.cancelBtn)        
            
            #给"服务器设置"按钮绑定事件处理器
            self.Bind(wx.EVT_BUTTON, self.OnTouch, self.setserverBtn)
            
            #增加BoxSizer,管理用户名密码部分的gbsizer1,
            #服务器设置部分的sbsizer,以及最下方的bsizer
            self.sizer = wx.BoxSizer(wx.VERTICAL)
            self.sizer.Add(self.gbsizer1, 0, wx.EXPAND, 20)
            self.sizer.Add(self.sbsizer, 0, wx.EXPAND, 20)
            self.sizer.Add(self.bsizer, 0, wx.EXPAND, 20)
            self.isShown = False    #用这个变量指示当前是否已将控件隐藏
            self.sizer.Hide(self.sbsizer)    #将控件隐藏
            self.SetClientSize((330,118))    #更改面板尺寸
            
            self.panel.SetSizerAndFit(self.sizer)
            self.sizer.SetSizeHints(self.panel)
            
        def OnTouch(self, event):
            if self.isShown:    #如果当前控件已显示
                self.setserverBtn.SetLabel(u'服务器设置↓')    #更新按钮标签
                self.sizer.Hide(self.sbsizer)    #隐藏服务器设置部分
                self.isShown = False    #服务器设置部分当前已隐藏
                self.SetClientSize((330,118))    #更新面板尺寸
            else:
                self.sizer.Show(self.sbsizer)    #如果当前控件已隐藏
                self.setserverBtn.SetLabel(u'服务器设置↑')    #更新按钮标签
                self.isShown = True    #服务器设置部分当前已显示
                self.SetClientSize((330,200))    #更新面板尺寸
            self.sizer.Layout()    #关键所在,强制sizer重新计算并布局sizer中的控件
            
            
    if __name__ == "__main__":
        app = wx.PySimpleApp()
        frame = MyFrame(None)
        frame.Show(True)
        app.MainLoop()


    6.wxPython构建小型管理系统


    运行效果:

    wKiom1O3wLnwWeA6AACnPr8Qv0M370.jpg

    ============================================

    代码部分:

    ============================================

    #coding:gbk
    
    import  wx    
         
    class TestTB(wx.Treebook):
        def __init__(self, parent, id):
            wx.Treebook.__init__(self, parent, id, style=wx.BK_DEFAULT)
            idGenerator=self.getNextID(50)#实例化生成器
            first=True
            panlist=self.getPageList()#得到目录列表
            for x in panlist:
                for k,v in x.items():
                    win=self.makeDemoPanel()#父页面
                    self.AddPage(win,k,p_w_picpathId=idGenerator.next())
                    if first:
                        first=False
                    else:
                        for sub in v:
                            win=sub[1]
                            self.AddSubPage(win,sub[0],p_w_picpathId=idGenerator.next())
                            #由上面的例子可以看出,父/子页面关系完全由添加的顺序而定
                            #即你AddPage后AddSubPage,一定是刚才这个Page所对应的菜单的子菜单的页面,
                            #所以看不到设“父目录”的代码
     
            self.Bind(wx.EVT_TREEBOOK_PAGE_CHANGED, self.OnPageChanged)
            self.Bind(wx.EVT_TREEBOOK_PAGE_CHANGING, self.OnPageChanging)
     
            # This is a workaround for a sizing bug on Mac...
            wx.FutureCall(100, self.AdjustSize)
     
        def getNextID(self,count):
            '''一个ID生成器'''
            imID = 0
            while True:
                yield imID
                imID += 1
                if imID == count:
                    imID = 0
                     
        def AdjustSize(self):
            self.GetTreeCtrl().InvalidateBestSize()
            self.SendSizeEvent()
             
     
        def makeDemoPanel(self,type=None):
            p = wx.Panel(self, -1)#子窗体的容器
            win=wx.Panel(p,-1)#子窗体容器包含的页面,此处我还是用了一个panel
            wx.StaticText(win,-1,type or "parnet")#此两句,在项目中用的时候应该包装出去,因为你的窗体可能非常复杂,而不是像我现在演示的这样仅仅只有一个Label
            p.win = win
            def OnCPSize(evt, win=win):
                win.SetPosition((0,0))
                win.SetSize(evt.GetSize())
            p.Bind(wx.EVT_SIZE, OnCPSize)
            return p
         
        def getPageList(self):
            '''我是以父目录为键名,子目录List为键值来保存本示例的菜单数据
              同时,子目录列表的结构为(子目录名,对应窗体对象)的元组,这样每次生成tree的子目录的时候,可以直接把窗体对象AddSubPage进去
            '''
            return [
                {'根节点                   ':[]},
                {'一级目录1':[('二级目录一',self.makeDemoPanel('内页1')),('二级目录二',self.makeDemoPanel('内页2')),('二级目录三',self.makeDemoPanel('内页3')),('二级目录四',self.makeDemoPanel('内页4')),]},  
                {'一级目录2':[('二级目录一',self.makeDemoPanel('内页1')),('二级目录二',self.makeDemoPanel('内页2')),('二级目录三',self.makeDemoPanel('内页3')),('二级目录四',self.makeDemoPanel('内页4')),]},  
                {'一级目录3':[('二级目录一',self.makeDemoPanel('内页1')),('二级目录二',self.makeDemoPanel('内页2')),('二级目录三',self.makeDemoPanel('内页3')),('二级目录四',self.makeDemoPanel('内页4')),]},  
                {'一级目录4':[('二级目录一',self.makeDemoPanel('内页1')),('二级目录二',self.makeDemoPanel('内页2')),('二级目录三',self.makeDemoPanel('内页3')),('二级目录四',self.makeDemoPanel('内页4')),]},  
                {'一级目录5':[('二级目录一',self.makeDemoPanel('内页1')),('二级目录二',self.makeDemoPanel('内页2')),('二级目录三',self.makeDemoPanel('内页3')),('二级目录四',self.makeDemoPanel('内页4')),]},  
                {'一级目录6':[('二级目录一',self.makeDemoPanel('内页1')),('二级目录二',self.makeDemoPanel('内页2')),('二级目录三',self.makeDemoPanel('内页3')),('二级目录四',self.makeDemoPanel('内页4')),]},  
                {'一级目录7':[('二级目录一',self.makeDemoPanel('内页1')),('二级目录二',self.makeDemoPanel('内页2')),('二级目录三',self.makeDemoPanel('内页3')),('二级目录四',self.makeDemoPanel('内页4')),]},  
                ]
     
     
        def OnPageChanged(self, event):
            '''演示捕捉页面切换事件'''
            old = event.GetOldSelection()
            new = event.GetSelection()
            sel = self.GetSelection()
            print 'OnPageChanged,  old:%d, new:%d, sel:%d\n' % (old, new, sel)
            event.Skip()
     
        def OnPageChanging(self, event):
            '''演示捕捉页面切换事件'''
            old = event.GetOldSelection()
            new = event.GetSelection()
            sel = self.GetSelection()
            print 'OnPageChanging, old:%d, new:%d, sel:%d\n' % (old, new, sel)
            event.Skip()
     
    def main():
        app=wx.App()#实际化应用
        frame=wx.Frame(None,-1,"my tree book demo")#实例化窗体
         
        def onExitApp(evt):
            '''退出的方法'''
            frame.Close(True)
        menuBar=wx.MenuBar()#顺便生成一个菜单,含有“退出”功能
        menu=wx.Menu()
        item=menu.Append(-1,"Exit\tCtrl-Q","Exit")
        frame.Bind(wx.EVT_MENU,onExitApp,item)
        frame.SetMenuBar(menuBar)
         
        menuBar.Append(menu,"&File")
        win=TestTB(frame,-1)#生成TreeBook
        if win:
            frame.SetSize((800,600))
            frame.Centre()
            frame.Show()
            win.SetFocus()
            frame.window=win#设置TreeBook控件为主窗体对象(其实我还是不明白frame对象的window属性有什么特权)
        else:
            frame.Destory()
        app.MainLoop()#进入主消息循环
         
    if __name__ == '__main__':
        main()


    7.自动搜索"computer"/登录人人网


    运行效果:

    wKioL1O5DQmQIwi7AAMFWYHFb9E658.jpg

    ============================================

    代码部分:

    ============================================

    搜索“computer”

    # -*- coding: utf-8 -*-
    
    import ie
    
    url = "http://ieeexplore.ieee.org/xpl/periodicals.jsp"
    
    myie = ie.NewIE(url)
    
    ie.Visible(myie)
    
    mybody = ie.GetBody(myie)
    input_ids=ie.GetNodes(mybody,"input")
    
    input_id_topsearch = ie.NodeByAttr(input_ids, "id", "browse_keyword")
    input_id_topsearch.value = "computer"
    
    div_ids=ie.GetNodes(mybody,"div")
    div_browser_title_hdr = ie.NodeByAttr(div_ids, "id", "browse-title-hdr")
    
    
    div_browser_input = ie.GetNodes(div_browser_title_hdr, "input")
    input_id_search = ie.NodeByAttr(div_browser_input, "type", "p_w_picpath")
    input_id_search.click();

    登录人人网

    # -*- coding:utf -*-
    import getpass
    import ie
    url="http://renren.com/"
    myie=ie.NewIE(url)
    ie.Visible(myie)
    mybody=ie.GetBody(myie)
    input_ids=ie.GetNodes(mybody,"input")
    input_id_email=ie.NodeByAttr(input_ids,"id","email")
    input_id_email.value=""
    input_id_psd=ie.NodeByAttr(input_ids,"id","password")
    input_id_psd.value=getpass.getpass()
    input_id_login=ie.NodeByAttr(input_ids,"id","login")
    input_id_login.click()

    附件:ie.py

    # -*- coding:utf-8 -*-
    import time
    from win32com.client import DispatchEx
    def ExistIE(url):
        ShellWindowsCLSID = '{9BA05972-F6A8-11CF-A442-00A0C90A8F39}'
        ies=DispatchEx(ShellWindowsCLSID)
        if len(ies)==0:
            return None
        for ie in ies:
            if ie.LocationURL==url:
                return ie
        return None
    def NewIE(url):
        ie=DispatchEx("InternetExplorer.Application")
        ie.Navigate(url)
        return ie
    def openIE(url):
        """
        >>> myie = ie.NewIE()
        """
        ie=ExistIE(url)
        if ie==None:
            ie=NewIE(url)
        return ie
    def WaitIE(ie):
        while ie.Busy:
            time.sleep(1)
    def Visible(ie):
        ie.Visible=1-ie.Visible
    def GetBody(ie):
        WaitIE(ie)
        return ie.Document.body
    def GetNodes(parentNode,tag):
        """
        >>> coldiv=GetNodes(body,"div")
        """
        childNodes=[]
        for childNode in parentNode.getElementsByTagName(tag):
            childNodes.append(childNode)
        return childNodes
    def NodeByAttr(Nodes,nodeattr,nodeval):
        """
        >>> div_id_editor=NodeByAttr(coldiv,"id","editor_ifr")
        """
        for node in Nodes:
            if str(node.getAttribute(nodeattr))==nodeval:
                return node
        return None
    def SetNode(node,val):
        node.innerHTML=val
    if __name__=="__main__":
        url="about:blank"
        myie=NewIE(url)
        Visible(myie)
        mybody=GetBody(myie)
       
        SetNode(mybody,"<div>Genius</div>"*3)
        coldiv=GetNodes(mybody,"div")
        SetNode(coldiv[0],"<p>Hello</p>"*10)
        coldiv[0].SetAttribute("id","test")
        div_id_test=ie.NodeByAttr(coldiv,"id","test")
        div_p=GetNodes(div_id_test,"p")
        for div_per_p in div_p:
            print div_per_p.innerHTML


    8.画板


    运行效果:

    wKioL1O5D0qTeJx8AAC7r9ojkLE622.jpg

    ============================================

    代码部分:

    ============================================

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    '''
        Function:绘图
        Input:NONE
        Output: NONE
        author: socrates
        blog:http://www.cnblogs.com/dyx1024/
        date:2012-07-13
    '''  
    
    import wx
    
    class PaintWindow(wx.Window):
            def __init__(self, parent, id):
                wx.Window.__init__(self, parent, id)
                self.SetBackgroundColour("Red")
                self.color = "Green"
                self.thickness = 10
            
                #创建一个画笔
                self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
                self.lines = []
                self.curLine = []
                self.pos = (0, 0)
                self.InitBuffer()
            
                #连接事件
                self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
                self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
                self.Bind(wx.EVT_MOTION, self.OnMotion)
                self.Bind(wx.EVT_SIZE, self.OnSize)
                self.Bind(wx.EVT_IDLE, self.OnIdle)
                self.Bind(wx.EVT_PAINT, self.OnPaint)
            
            def InitBuffer(self):
                size = self.GetClientSize()
                
                #创建缓存的设备上下文
                self.buffer = wx.EmptyBitmap(size.width, size.height)
                dc = wx.BufferedDC(None, self.buffer)
                
                #使用设备上下文
                dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
                dc.Clear()
                self.DrawLines(dc)
                self.reInitBuffer = False
                
            def GetLinesData(self):
                return self.lines[:]
            
            def SetLinesData(self, lines):
                self.lines = lines[:]
                self.InitBuffer()
                self.Refresh()
                
            def OnLeftDown(self, event):
                self.curLine = []
                
                #获取鼠标位置
                self.pos = event.GetPositionTuple()
                self.CaptureMouse()
                
            def OnLeftUp(self, event):
                if self.HasCapture():
                    self.lines.append((self.color,
                                       self.thickness,
                                       self.curLine))
                    self.curLine = []
                    self.ReleaseMouse()
                    
            def OnMotion(self, event):
                if event.Dragging() and event.LeftIsDown():
                    dc = wx.BufferedDC(wx.ClientDC(self), self.buffer)
                    self.drawMotion(dc, event)
                event.Skip()
            
            def drawMotion(self, dc, event):
                dc.SetPen(self.pen)
                newPos = event.GetPositionTuple()
                coords = self.pos + newPos
                self.curLine.append(coords)
                dc.DrawLine(*coords)
                self.pos = newPos
                
            def OnSize(self, event):
                self.reInitBuffer = True
            
            def OnIdle(self, event):
                if self.reInitBuffer:
                    self.InitBuffer()
                    self.Refresh(False)
            
            def OnPaint(self, event):
                dc = wx.BufferedPaintDC(self, self.buffer)
                
            def DrawLines(self, dc):
                for colour, thickness, line in self.lines:
                    pen = wx.Pen(colour, thickness, wx.SOLID)
                    dc.SetPen(pen)
                    for coords in line:
                        dc.DrawLine(*coords)
            
            def SetColor(self, color):
                self.color = color
                self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
                
            def SetThickness(self, num):
                self.thickness = num
                self.pen = wx.Pen(self.color, self.thickness, wx.SOLID)
                
    class PaintFrame(wx.Frame):
        def __init__(self, parent):
            wx.Frame.__init__(self, parent, -1, "Panit Frame", size = (800, 600))
            self.paint = PaintWindow(self, -1)
            
            #状态栏
            self.paint.Bind(wx.EVT_MOTION, self.OnPaintMotion)
            self.InitStatusBar()
            
            #创建菜单
            self.CreateMenuBar()
    
            
        def InitStatusBar(self):
            self.statusbar = self.CreateStatusBar()
            #将状态栏分割为3个区域,比例为1:2:3
            self.statusbar.SetFieldsCount(3)
            self.statusbar.SetStatusWidths([-1, -2, -3])   
            
        def OnPaintMotion(self, event):
            
            #设置状态栏1内容
            self.statusbar.SetStatusText(u"鼠标位置:" + str(event.GetPositionTuple()), 0)
            
            #设置状态栏2内容
            self.statusbar.SetStatusText(u"当前线条长度:%s" % len(self.paint.curLine), 1)
            
            #设置状态栏3内容
            self.statusbar.SetStatusText(u"线条数目:%s" % len(self.paint.lines), 2)   
                 
            event.Skip()
            
        def MenuData(self):
            '''
                       菜单数据
            '''
            #格式:菜单数据的格式现在是(标签, (项目)),其中:项目组成为:标签, 描术文字, 处理器, 可选的kind
            #标签长度为2,项目的长度是3或4
            return [("&File", (             #一级菜单项
                               ("&New", "New paint file", self.OnNew),             #二级菜单项
                               ("&Open", "Open paint file", self.OnOpen),
                               ("&Save", "Save paint file", self.OnSave),
                               ("", "", ""),                                       #分隔线
                               ("&Color", (
                                           ("&Black", "", self.OnColor, wx.ITEM_RADIO),  #三级菜单项,单选
                                           ("&Red", "", self.OnColor, wx.ITEM_RADIO),
                                           ("&Green", "", self.OnColor, wx.ITEM_RADIO), 
                                           ("&Blue", "", self.OnColor, wx.ITEM_RADIO))),
                               ("", "", ""),
                               ("&Quit", "Quit", self.OnCloseWindow)))
                   ]  
        def CreateMenuBar(self):
            '''
            创建菜单
            '''
            menuBar = wx.MenuBar()
            for eachMenuData in self.MenuData():
                menuLabel = eachMenuData[0]
                menuItems = eachMenuData[1]
                menuBar.Append(self.CreateMenu(menuItems), menuLabel) 
            self.SetMenuBar(menuBar)
            
        def CreateMenu(self, menuData):
            '''
            创建一级菜单
            '''
            menu = wx.Menu()
            for eachItem in menuData:
                if len(eachItem) == 2:
                    label = eachItem[0]
                    subMenu = self.CreateMenu(eachItem[1])
                    menu.AppendMenu(wx.NewId(), label, subMenu) #递归创建菜单项
                else:
                    self.CreateMenuItem(menu, *eachItem)
            return menu
        
        def CreateMenuItem(self, menu, label, status, handler, kind = wx.ITEM_NORMAL):
            '''
            创建菜单项内容
            '''
            if not label:
                menu.AppendSeparator()
                return
            menuItem = menu.Append(-1, label, status, kind)
            self.Bind(wx.EVT_MENU, handler,menuItem)
        
        def OnNew(self, event):
            pass
        
        def OnOpen(self, event):
            pass
        
        def OnSave(self, event): 
            pass
        
        def OnColor(self, event):
            '''
            更改画笔内容
            '''
            menubar = self.GetMenuBar()
            itemid = event.GetId()
            item = menubar.FindItemById(itemid)
            color = item.GetLabel() #获取菜单项内容
            self.paint.SetColor(color)
            
        def OnCloseWindow(self, event):
            self.Destroy()
                         
            
    if __name__ == '__main__':
        app = wx.PySimpleApp()
        frame = PaintFrame(None)
        frame.Show(True)
        app.MainLoop()



关键字

上一篇: 3G

下一篇: 通信英语_3