wxPython学习笔记

import wx

class App(wx.App):                           //定义wx.App的子类

       defOnInit(self):

             frame = wx.Frame(parent=None,title=’Bare’)

             frame.Show()

             return True

app = App()                         //创建wx.App子类(App)的实例,实例化

app.MainLoop()

------------------------------------------------------------

frame.Show(True)             frame.Show(False)

 
更简单的实现方式:

import  wx
app  wx.App()
frame  wx.Frame( None , - 1 , u"Just do it" )
frame.Show()
app.MainLoop()


 

----------------------------------------------------------------------

#!/usr/bin/env python

import wx

class Frame(wx.Frame):

       pass

 

class App(wx.App):

       defOnInit(self):

              self.frame= Frame(parent=None, title=’Spare’)

              self.frame.Show()

              self.SetTopWindow(self.frame)

              returnTrue

if __name__ == ’__main__’:

       app= App()

       app.MainLoop()

 

SetTopWindow()方法是一个可选的方法,它让wxPython 方法知道哪个框架或对话框将被认为是主要的。一个wxPython程序可以有几个 框架,其中有一个是被设计为应用程序的顶级窗口的。

 

 

 

#!/usr/bin/env python

“””Hello, wxPython! program.”””

import wx

class Frame(wx.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()

 

 

1、定义这个子类

2、在定义的子类中写一个OnInit()方法

3、在你的程序的主要部分创建这个类的一个实例

4、调用应用程序实例的MainLoop()方法。这个方法将程序的控制权转交wxPython

 

使用wxFormBuilder:

# -*- coding: utf-8 -*-


import  wx
import  wx.xrc

class  testFrame1 (wx.Frame) :
    def  __init__ ( self parent ) :
         wx.Frame. __init__ ( self parent id = wx.ID_ANY,  title = u"Test1" pos = wx.DefaultPosition,  size = wx.Size( 500 300 ),
        style = wx.DEFAULT_FRAME_STYLE  wx.TAB_TRAVERSAL)

        self .SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
        self .SetForegroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW))

        bSizer4  wx.BoxSizer(wx.VERTICAL)

        self .m_staticText1  wx.StaticText( self , wx.ID_ANY,  u"这是一个文本框" , wx.DefaultPosition, wx.DefaultSize,  0 )
        self .m_staticText1.Wrap( - 1 )
        self .m_staticText1.SetFont(wx.Font( 13 70 90 90 False "STXinwei" ))

        bSizer4.Add( self .m_staticText1,  0 , wx.ALL  wx.ALIGN_CENTER_HORIZONTAL,  5 )

        self .SetSizer(bSizer4)
        self .Layout()

        self .Centre(wx.BOTH)

    def  __del__ ( self ) :
        pass


#增加以下代码,进入主程序
if  __name__ == '__main__' :
     app  wx.App()
    frame = testFrame1( None )
    frame.Show()

  app.MainLoop() 

----------------------------------------------------------------------------------

接下来,尝试加入菜单:
 
# -*- coding: utf-8 -*-
import  wx
import  wx. xrc
class  testFrame1 ( wx. Frame ):
     def  __init__ ( selfparent ):
         wx. Frame. __init__ ( selfparentid = wx. ID_ANYtitle = u""pos = wx. DefaultPositionsize = wx. Size ( 500300 ),
                                style = wx. DEFAULT_FRAME_STYLE  |  wx. TAB_TRAVERSAL )
         self. SetSizeHintsSz ( wx. DefaultSizewx. DefaultSize )
         self. SetForegroundColour ( wx. SystemSettings. GetColour ( wx. SYS_COLOUR_WINDOW ))
         self. m_menubar1  =  wx. MenuBar ( 0 )
         self. m_menu1  =  wx. Menu ( )
         self. m_menu11  =  wx. Menu ( )
         self. m_menuItem2  =  wx. MenuItem ( self. m_menu11wx. ID_ANYu""wx. EmptyStringwx. ITEM_NORMAL )
         self. m_menu11. AppendItem ( self. m_menuItem2 )
         self. m_menuItem6  =  wx. MenuItem ( self. m_menu11wx. ID_ANYu""wx. EmptyStringwx. ITEM_NORMAL )
         self. m_menu11. AppendItem ( self. m_menuItem6 )
         self. m_menu1. AppendSubMenu ( self. m_menu11u"" )
         self. m_menuItem3  =  wx. MenuItem ( self. m_menu1wx. ID_ANYu""wx. EmptyStringwx. ITEM_NORMAL )
         self. m_menu1. AppendItem ( self. m_menuItem3 )
         self. m_menuItem4  =  wx. MenuItem ( self. m_menu1wx. ID_ANYu"退"wx. EmptyStringwx. ITEM_NORMAL )
         self. m_menu1. AppendItem ( self. m_menuItem4 )
         self. m_menubar1. Append ( self. m_menu1u"" )
         self. m_menu2  =  wx. Menu ( )
         self. m_menubar1. Append ( self. m_menu2u"" )
         self. SetMenuBar ( self. m_menubar1 )
         self. Centre ( wx. BOTH )
     def  __del__ ( self ):
         pass
#
if  __name__ == '__main__':
     app  =  wx. App ( )
     frame = testFrame1 ( None )
     frame. Show ( )
     app. MainLoop ( )
 运行结果是这样的:
图片 
Linux和Mac,菜单栏默认都是显示在最上方的。这点要注意。 

    至于按钮,选项卡等,用的时候再说。布局方面,有点像bootstrap,横切,纵切。接下来就是函数调用了。发现自己前端做出来会很丑,而web做桌面,一直没有一个通用的合适的框架,网易的HeX好像还可以,改天要试试看,如果web做跨平台桌面,能够调用python函数就好了,因为只会用python写函数。
    感慨一下:什么时候XCode能够用原生swift,storyboard写跨平台桌面哇,swift写UI,python写算法,这大概就是我的开发理想了吧。

控件调用函数,大同小异,声明事件,链接函数,获取值。

猜你喜欢

转载自blog.csdn.net/limaning/article/details/53725015
今日推荐