wxPython编程

来源:互联网 发布:数据采集卡报价 编辑:程序博客网 时间:2024/06/05 17:08

触发其他控件的事件

        panel=self.GetChildren()[0]
        for each in panel.GetChildren():
            if each.GetLabel() == "mybutton":
                finder=each
                break
        event=wx.CommandEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED,
                              finder.GetId())
        finder.GetEventHandler().ProcessEvent(event)


添加菜单栏

    def menuData(self):        return [("&File",                 (("&New", "New FIle", self.OnNew),("&Close", "Close FIle", self.OnClose))                 ),                ("&Option",                 (("&Set", "Set Help", self.OnNew),("&Add", "Add Help", self.OnClose))                 )                ]    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):        wx.MessageBox("OnNew")    def OnClose(self,event):        wx.MessageBox("OnClose")

制作程序启动界面

        jpg=wx.Image("bk.jpg").ConvertToBitmap()
        wx.SplashScreen(jpg,wx.SPLASH_CENTER_ON_SCREEN|wx.SPLASH_TIMEOUT,
                        2000,None,-1)
        wx.Yield()


布局管理器


box布局

box=wx.BoxSizer(wx.HORIZONTAL)
box.Add(control1,1,wx.EXPAND)
box.Add(control2,2,wx.EXPAND)
self.SetSizer(box)


流式网格布局

sizer=wx.FlexGridSizer(cols=2,hgap=6,vgap=60)
        sizer.AddMany([staticText,basicText,pwdLabel])
        panel.SetSizer(sizer)



进度条

        self.gauge=wx.Gauge(panel,-1,100,(0,0),(300,200))
        self.gauge.SetBezelFace(3)
        self.gauge.SetShadowWidth(3)
        self.Bind(wx.EVT_IDLE, self.OnIdle)


运行wxpython自带的demo

把原有的

if __name__ == '__main__':
    import sys,os
    import run
    run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])

替换成

class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"TestFrame",size=(500,400))
        panel=TestPanel(self,None)


if __name__ == '__main__':
    app=wx.PySimpleApp()
    frame=MyFrame()
    frame.Show()
    app.MainLoop()


根据sizer自动设置初始窗口大小

fgs=wx.FlexGridSizer(cols=2,hgap=10,vgap=10)

p=wx.Panel(self)

p.SetSizerAndFit(fgs)

self.Fit()


使用剪切板

text_data=wx.TextDataObject("hello")
if wx.TheClipboard.Open():
    wx.TheClipboard.SetData(text_data)
    wx.TheClipboard.Flush()
    wx.TheClipboard.Close()