![wxPython中文教程 简单入门加实例_第1页](http://file4.renrendoc.com/view/f3ee66d3436b8dd15f750b630a0bc42b/f3ee66d3436b8dd15f750b630a0bc42b1.gif)
![wxPython中文教程 简单入门加实例_第2页](http://file4.renrendoc.com/view/f3ee66d3436b8dd15f750b630a0bc42b/f3ee66d3436b8dd15f750b630a0bc42b2.gif)
![wxPython中文教程 简单入门加实例_第3页](http://file4.renrendoc.com/view/f3ee66d3436b8dd15f750b630a0bc42b/f3ee66d3436b8dd15f750b630a0bc42b3.gif)
![wxPython中文教程 简单入门加实例_第4页](http://file4.renrendoc.com/view/f3ee66d3436b8dd15f750b630a0bc42b/f3ee66d3436b8dd15f750b630a0bc42b4.gif)
![wxPython中文教程 简单入门加实例_第5页](http://file4.renrendoc.com/view/f3ee66d3436b8dd15f750b630a0bc42b/f3ee66d3436b8dd15f750b630a0bc42b5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 HYPERLINK /blog/898562 wxPython中文教程 简单入门加实例 博客分类: HYPERLINK /category/91095 Python 2 / Wxpython HYPERLINK /blogs/tag/wxPython wxPython HYPERLINK /blogs/tag/Python Python HYPERLINK /blogs/tag/%E7%BC%96%E7%A8%8B 编程 HYPERLINK /blogs/tag/%E6%B5%8F%E8%A7%88%E5%99%A8 浏览器 HYPERLINK /blogs/tag/%E8%84%9A%E6
2、%9C%AC 脚本wx.Window 是一个基类,许多构件从它继承。包括 wx.Frame 构件。技术上这意味着,我们可以在所有的子类中使用 wx.Window 的方法。我们这里介绍它的几种方法:* SetTitle( string title ) 设置窗口标题。只可用于框架和对话框。 * SetToolTip( wx.ToolTip tip ) 为窗口添加提示。 * SetSize( wx.Size size ) 设置窗口的尺寸。 * SetPosition( wx.Point pos ) 设置窗口出现的位置。 * Show( show = True ) 显示或隐藏窗口。其中的参数可以为 T
3、rue 或False。 * Move( wx.Point pos ) 将窗口移动到指定位置。 * SetCursor( wx.StockCursor id ) 设置窗口的鼠标指针样式。 Python代码 HYPERLINK javascript:void() o 收藏这段代码 importwx app=wx.PySimpleApp() frame=wx.Frame(None,-1,) frame.SetToolTip(wx.ToolTip(Thisisaframe) frame.SetCursor(wx.StockCursor(wx.CURSOR_MAGNIFIER) frame.SetPos
4、ition(wx.Point(0,0) frame.SetSize(wx.Size(300,250) frame.SetTitle(simple2.py) frame.Show() app.MainLoop()import wxapp = wx.PySimpleApp()frame = wx.Frame( None, -1, )frame.SetToolTip( wx.ToolTip( This is a frame ) )frame.SetCursor( wx.StockCursor( wx.CURSOR_MAGNIFIER ) )frame.SetPosition( wx.Point( 0
5、, 0 ) )frame.SetSize( wx.Size( 300, 250 ) )frame.SetTitle( simple2.py )frame.Show()app.MainLoop() 我们创建了一个This is a frame提示。鼠标指针被设置为放大镜样式。可用的鼠标指针样式有:wx.CURSOR_ARROWwx.CURSOR_RIGHT_ARROWwx.CURSOR_BLANKwx.CURSOR_BULLSEYEwx.CURSOR_CHARwx.CURSOR_CROSSwx.CURSOR_HANDwx.CURSOR_IBEAMwx.CURSOR_LEFT_BUTTONwx.C
6、URSOR_MAGNIFIERwx.CURSOR_MIDDLE_BUTTONwx.CURSOR_NO_ENTRYwx.CURSOR_PAINT_BRUSHwx.CURSOR_PENCILwx.CURSOR_POINT_LEFTwx.CURSOR_POINT_RIGHTwx.CURSOR_QUESTION_ARROWwx.CURSOR_RIGHT_BUTTONwx.CURSOR_SIZENESWwx.CURSOR_SIZENSwx.CURSOR_SIZENWSEwx.CURSOR_SIZEWEwx.CURSOR_SIZINGwx.CURSOR_SPRAYCANwx.CURSOR_WAITwx.C
7、URSOR_WATCHwx.CURSOR_ARROWWAIT我们把窗口放在了左上角,大小是 300 x250 像素,标题被设置为simple2.py。=wx.Frame 是一个容器构件。这意味着它可以容纳其它构件。它有如下的构造器: wx.Frame( wx.Window parent, id, string title, wx.Point pos=wx.DefaultPosition, wx.Size size=wx.DefaultSize, style = wx.DEFAULT_FRAME_STYEL, string name=frame ) 构造器是一种特殊的函数。它在对象创建时被调用。
8、对于我们来说重要的是,我们打算创建一个新的构件时,只要简单的调用它的构造器就行了。Python允许参数有默认值。所以在wx.Frame中必须的参数就只剩下了parent、id和title了。如果你按顺序指定参数的值,那么你可以不必带上参数的名称。比如你想创建一个wx.Frame构件,它没有parent,标识符是100,标题是Title,位置在(100,50)大小是 (100,100):frame=wx.Frame(None,100,Title,wx.Point(100,50),wx.Size(100,100) 下面我们省略了 pos 参数。所以必须明确的提供 size 参数:frame=wx.
9、Frame(None,100,Title,size=wx.Size(100,100) 下面的例子,我们将使用其它有用的特性:Python代码 HYPERLINK javascript:void() o 收藏这段代码 importwx defmain(): app=wx.PySimpleApp() frame=wx.Frame(None,-1,Icon,wx.DefaultPosition,wx.Size(350,300) frame.SetIcon(wx.Icon(Tipi.ico,wx.BITMAP_TYPE_ICO) frame.Center() frame.Show() app.Main
10、Loop() if_name_=_main_: main()import wxdef main():app=wx.PySimpleApp()frame=wx.Frame(None,-1,Icon,wx.DefaultPosition,wx.Size(350,300)frame.SetIcon(wx.Icon(Tipi.ico,wx.BITMAP_TYPE_ICO)frame.Center()frame.Show()app.MainLoop()if _name_ = _main_:main() Icon文件名为Iipi.ico。位于当前目录下。Icon构造器的第一个参数是Icon文件名,第二个参
11、数是 Icon 文件类型。就像你注意到的,程序的结构发生了改变。这样才符合Python编程的标准。在Python中,_name_ 是一个特殊的变量。更复杂的程序通常由几个文件组成,但仅有一个文件用于开启程序。对于这个文件,当你直接执行它时,Python设置_name_变量的值为_main_。所以,如果你双击icon.py或从命令行直接执行它,_name_ 变量的值就会等于_main_。main()函数也就会被调用。=创建一个菜单栏在wxPython中相当简单。我们将讨论给菜单栏添加菜单、为已经存在的菜单添加子菜单。所有菜单都有菜单项组成。菜单项可以是常规项、复选项以及单选项。先来创建一个菜单栏
12、:menubar = wx.MenuBar()接着创建我们的菜单:file = wx.Menu()edit = wx.Menu()help = wx.Menu()然后为菜单添加菜单项。做这件事有两种方式:file.Append( 101, &Open, Open a new document )file.Append( 102, &Save, Save the document )我们可以使用横线来分隔逻辑区域:file.AppendSeparator()如果你想在菜单中使用 Icon,你需要手工创建 MenuItem 对象:quit=wx.MenuItem(file,105,&QuittCt
13、rl+Q,Quit the Application)quit.SetBitmap(wx.Image(stock_exit-16.png, wx.BITMAP_TYPE_PNG).ConvertToBitmap()file.AppendItem(quit)wxPython工具包只能把bitmap图片用于菜单,所以我们需要把我们的PNG图片转换为bitmap格式。然后把菜单加入到菜单栏:menubar.Append( file, &File )menubar.Append( edit, &Edit )menubar.Append( help, &Help )最后在我们的程序类中创建菜单栏:self
14、.SetMenuBar( menubar )我们把上述这些组成个小脚本:Python代码 HYPERLINK javascript:void() o 收藏这段代码 #!/usr/bin/envpython #FileName:menu1.py importwx classMyMenu(wx.Frame): def_init_(self,parent,ID,title): wx.Frame._init_(self,parent,-1,title,wx.DefaultPosition,wx.Size(200,150) menubar=wx.MenuBar() file=wx.Menu() edit
15、=wx.Menu() help=wx.Menu() file.Append(101,&Open,Openanewdocument) file.Append(102,&Save,Savethedocument) file.AppendSeparator() quit=wx.MenuItem(file,105,&QuittCtrl+Q,QuittheApplication) quit.SetBitmap(wx.Image(stock_exit-16.png,wx.BITMAP_TYPE_PNG).ConvertToBitmap() file.AppendItem(quit) menubar.App
16、end(file,&File) menubar.Append(edit,&Edit) menubar.Append(help,&Help) self.SetMenuBar(menubar) classMyApp(wx.App): defOnInit(self): frame=MyMenu(None,-1,menu1.py) frame.Show(True) returnTrueapp=MyApp(0) app.MainLoop()#!/usr/bin/env python# FileName: menu1.pyimport wxclass MyMenu( wx.Frame ):def _ini
17、t_(self,parent,ID,title):wx.Frame._init_(self,parent,-1,title,wx.DefaultPosition,wx.Size(200, 150)menubar=wx.MenuBar()file=wx.Menu()edit=wx.Menu()help=wx.Menu()file.Append(101,&Open,Open a new document)file.Append(102,&Save,Save the document)file.AppendSeparator()quit=wx.MenuItem(file,105,&QuittCtrl
18、+Q,Quit the Application)quit.SetBitmap(wx.Image(stock_exit-16.png, wx.BITMAP_TYPE_PNG).ConvertToBitmap()file.AppendItem(quit)menubar.Append(file,&File)menubar.Append(edit,&Edit)menubar.Append(help,&Help)self.SetMenuBar( menubar )class MyApp(wx.App):def OnInit(self):frame=MyMenu(None,-1,menu1.py)fram
19、e.Show(True)return Trueapp=MyApp(0)app.MainLoop()到目前为止我们已经知道了如何定义默认的普通菜单项。接下来让我们看看如何明确的定义复选菜单项和单选菜单项:edit.Append( 201, check item1, , wx.ITEM_CHECK )edit.Append( 202, check item2, , kind=wx.ITEM_CHECK )或者quit=wxMenuItem(file,105,&QuittCtrl+Q,Quit the Application, wx.ITEM_NORMAL)其中那个参数被称为种类。可选的种类有:*
20、wx.ITEM_NORMAL 默认* wx.ITEM_CHECK 复选* wx.ITEM_RADIO 单选如果你想创建子菜单,要先创建一个菜单:submenu = wx.Menu()然后为此子菜单添加一些菜单项:submenu.Append( 301, radio item1, kind= wx.ITEM_RADIO )submenu.Append( 302, radio item2, kind=wx.ITEM_RADIO )submenu.Append( 303, radio item3, kind=wx.ITEM_RADIO )把子菜单添加到某个菜单对象就成了:edit.AppendMen
21、u( 203, submenu, submenu )最后,我们来看一下如何响应用户的动作。我们只是简单的感受一下。后面会有更详细的解释。当用户选择了某个菜单项时,就产生了一个事件。我们必须提供一个事件处理器,用它反应相应的事件。在 wxPython 中处理事件是到目前为止我已知最优雅最简单的了。如果翻参考手册,你会发现 wx.EVT_MENU 处理在事件处理那章。假如我们想为 quit 菜单项添加一个事件处理器:wx.EVT_MENU( self, 105, self.OnQuit )我们需要提供三个信息。我们要把事件处理器绑定到的那个对象。这里是 self, 程序的主对象。与之相匹配的菜单项
22、的 id。以及处理事件的方法的名称。对用户的动作做出反应的方法需要两个参数。第一个是方法定义于其中的那个对象。第二个是产生的事件。本例中,我们什么也不做,只是简单的关闭我们的程序:def OnQuit( self, event ):self.Close()下面的脚本会展示上面说的各种菜单项、子菜单以及一个简单的事件处理。我讨厌程序窗口出现在角落里,所以加上了:self.Centre()这样窗口就会出现在屏幕的当中。Python代码 HYPERLINK javascript:void() o 收藏这段代码 #!/usr/bin/python #FileName:menu2.py importwx
23、 classMyMenu(wx.Frame): def_init_(self,parent,ID,title): wx.Frame._init_(self,parent,-1,title, wx.DefaultPosition,wx.Size(380,250) menubar=wx.MenuBar() file=wx.Menu() edit=wx.Menu() help=wx.Menu() file.Append(101,&Open,Openanewdocument) file.Append(102,&Save,Savethedocument) file.AppendSeparator() q
24、uit=wx.MenuItem(file,105,&QuittCtrl+Q,QuittheApplication) quit.SetBitmap(wx.Image(gtk-quit.png, wx.BITMAP_TYPE_PNG).ConvertToBitmap() file.AppendItem(quit) edit.Append(201,checkitem1,wx.ITEM_CHECK) edit.Append(202,checkitem2,kind=wx.ITEM_CHECK) submenu=wx.Menu() submenu.Append(301,radioitem1,kind=wx
25、.ITEM_RADIO) submenu.Append(302,radioitem2,kind=wx.ITEM_RADIO) submenu.Append(303,radioitem3,kind=wx.ITEM_RADIO) edit.AppendMenu(203,submenu,submenu) menubar.Append(file,&File) menubar.Append(edit,&Edit) menubar.Append(help,&Help) self.SetMenuBar(menubar) self.Centre() wx.EVT_MENU(self,105,self.OnQu
26、it) defOnQuit(self,event): self.Close() classMyApp(wx.App): defOnInit(self): frame=MyMenu(None,-1,menu2.py) frame.Show(True) returnTrueapp=MyApp(0) app.MainLoop()#!/usr/bin/python# FileName: menu2.pyimport wxclass MyMenu(wx.Frame):def _init_(self, parent, ID, title):wx.Frame._init_(self, parent, -1,
27、 title,wx.DefaultPosition, wx.Size(380, 250)menubar = wx.MenuBar()file = wx.Menu()edit = wx.Menu()help = wx.Menu()file.Append(101, &Open, Open a new document)file.Append(102, &Save, Save the document)file.AppendSeparator()quit = wx.MenuItem(file, 105, &QuittCtrl+Q, Quit the Application)quit.SetBitma
28、p(wx.Image (gtk-quit.png,wx.BITMAP_TYPE_PNG).ConvertToBitmap()file.AppendItem(quit)edit.Append(201, check item1, , wx.ITEM_CHECK)edit.Append(202, check item2, kind= wx.ITEM_CHECK)submenu = wx.Menu()submenu.Append(301, radio item1, kind=wx.ITEM_RADIO)submenu.Append(302, radio item2, kind=wx.ITEM_RADI
29、O)submenu.Append(303, radio item3, kind= wx.ITEM_RADIO)edit.AppendMenu(203, submenu, submenu)menubar.Append(file, &File)menubar.Append(edit, &Edit)menubar.Append(help, &Help)self.SetMenuBar(menubar)self.Centre()wx.EVT_MENU(self, 105, self.OnQuit)def OnQuit(self, event):self.Close()class MyApp(wx.App
30、):def OnInit(self):frame = MyMenu(None, -1, menu2.py)frame.Show(True)return Trueapp = MyApp(0)app.MainLoop() =工具栏是一个集合了大多数常用命令和动作的构件。典型的象保存、打开、剪切、复制、粘贴、撤销、重复等。目的是为了节省时间。从工具栏执行动作只需点击一下,而从菜单需要点击两下。 Python代码 HYPERLINK javascript:void() o 收藏这段代码 #!/usr/bin/envpython #FileName:toolbar.py importwx classMy
31、ToolBar(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,wx.Image(stock_new.png,wx.BITMAP_TYPE_PNG).ConvertToBitma
32、p(),New,) toolbar.AddSimpleTool(2,wx.Image(stock_open.png,wx.BITMAP_TYPE_PNG).ConvertToBitmap(),Opne,) toolbar.AddSimpleTool(3,wx.Image(stock_save.png,wx.BITMAP_TYPE_PNG).ConvertToBitmap(),Save,) toolbar.AddSeparator() toolbar.AddSimpleTool(4,wx.Image(stock_exit.png,wx.BITMAP_TYPE_PNG).ConvertToBitm
33、ap(),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) defOnNew(self,event): self.statusbar.SetSt
34、atusText(NewCommand) defOnOpen(self,event): self.statusbar.SetStatusText(OpenCommand) defOnSave(self,event): self.statusbar.SetStatusText(SaveCommand) defOnExit(self,event): self.Close() classMyApp(wx.App): defOnInit(self): frame=MyToolBar(None,-1,toolbar.py) frame.Show(True) returnTrueapp=MyApp(0)
35、app.MainLoop()#!/usr/bin/env python# FileName: toolbar.pyimport wxclass 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_HORIZONT
36、AL | wx.NO_BORDER )toolbar.AddSimpleTool( 1, wx.Image( stock_new.png, wx.BITMAP_TYPE_PNG ).ConvertToBitmap(), New, )toolbar.AddSimpleTool( 2, wx.Image( stock_open.png, wx.BITMAP_TYPE_PNG ).ConvertToBitmap(), Opne, )toolbar.AddSimpleTool( 3, wx.Image( stock_save.png, wx.BITMAP_TYPE_PNG ).ConvertToBit
37、map(), Save, )toolbar.AddSeparator()toolbar.AddSimpleTool( 4, wx.Image( stock_exit.png, wx.BITMAP_TYPE_PNG ).ConvertToBitmap(), 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_TO
38、OL( 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 Comma
39、nd )def OnExit( self, event ):self.Close()class MyApp( wx.App ):def OnInit( self ):frame = MyToolBar( None, -1, toolbar.py )frame.Show( True )return Trueapp = MyApp( 0 )app.MainLoop()wx.BoxSizer 在后面的布局章节会解释到。工具栏构件通过三步创建。首先,我们创建一个工具栏对象。tollbar = wx.ToolBar( self, -1, style= wx.TB_HORIZONTAL | wx.NO_B
40、ORDER )然后我们使用 AddSimpleTool() 方法为工具栏添加了几个工具。你在参考手册中找不到这个方法。它是一个 wxPython 扩展。这既是个诅语也是个祝福。它合 Python 编程变得容易。但另一方面,这些扩展没有被写入文档。你不得不通过浏览源代码、demo 或者在邮件列表中提问来了解它们。toolbar.AddSimpleTool(1,wx.Image(stock_new.png,wx.BITMAP_TYPE_PNG).ConvertToBitmap(),New,)最后,我们调用 Realize() 方法。这个方法显示工具栏构件。toolbar.Realize()工具栏有
41、好几个事件处理顺。当你点击工具栏上的图标时,就会产生一个wx.EVT_COMMAND_TOOL_CLICKED事件。我们把此事件绑定的某个具体的wx.EVT_TOOL处理器方法上。为了显示相关的输出,我们创建了一个状态栏。self.statusbar = self.CreateStatusBar()这仍然是另外一个 wxPython 扩展。这样一旦我们点击工具栏按纽,状态栏就会显示相关信息。这是通过使用 SetStatusText() 方法达成的。=有两种基本的方法可以用来布置我们的构件。第一种是手工布置。我们通过在构造器中指定位置来摆放我们的构件。 Python代码 HYPERLINK ja
42、vascript:void() o 收藏这段代码 #!/usr/bin/evnpython importwx classMyFrame(wx.Frame): def_init_(self,parent,ID,title): wx.Frame._init_(self,parent,ID,title,wx.DefaultPosition,wx.Size(250,50) panel=wx.Panel(self,-1) wx.Button(panel,-1,Button1,(0,0) wx.Button(panel,-1,Button2,(80,0) wx.Button(panel,-1,Button
43、3,(160,0) classMyApp(wx.App): defOnInit(self): frame=MyFrame(None,-1,layout.py) frame.Show(True) frame.Centre() app=MyApp(0) app.MainLoop()#!/usr/bin/evn pythonimport wxclass MyFrame(wx.Frame):def _init_(self,parent,ID,title):wx.Frame._init_(self,parent,ID,title,wx.DefaultPosition,wx.Size(250,50)pan
44、el=wx.Panel(self,-1)wx.Button(panel,-1,Button1,(0,0)wx.Button(panel,-1,Button2,(80,0)wx.Button(panel,-1,Button3,(160,0)class MyApp(wx.App):def OnInit(self):frame=MyFrame(None,-1,layout.py)frame.Show(True)frame.Centre()app = MyApp(0)app.MainLoop() 当窗口大小改变时,按纽的大小和位置并不改变。这是手工设置构件位置的一个主要特征。第二种方法是使用布局管理器
45、。这是现实程序中比较流行的方法。基本上你要使用 sizer。我们将讨论:* wx.BoxSizer* wx.StaticBoxSizer* wx.GridSizer* wx.GridBagSizer=我们来写一个程序,它的窗口顶部的一行被三个按纽占据。这些按纽会随窗口的改变而改变。Python代码 HYPERLINK javascript:void() o 收藏这段代码 #!/usr/bin/envpython #FileName:wxboxsizer.py importwx classMyFrame(wx.Frame): def_init_(self,parent,ID,title): wx
46、.Frame._init_(self,parent,ID,title,(-1,-1),wx.Size(250,50) panel=wx.Panel(self,-1) box=wx.BoxSizer(wx.HORIZONTAL) box.Add(wx.Button(panel,-1,Button1),1) box.Add(wx.Button(panel,-1,Button2),1) box.Add(wx.Button(panel,-1,Button3),1) panel.SetSizer(box) self.Centre() classMyApp(wx.App): defOnInit(self)
47、: frame=MyFrame(None,-1,wxboxsizer.py) frame.Show(True) returnTrueapp=MyApp(0) app.MainLoop()#!/usr/bin/env python# FileName: wxboxsizer.pyimport wxclass MyFrame(wx.Frame):def _init_(self,parent,ID,title):wx.Frame._init_(self,parent,ID,title,(-1,-1),wx.Size(250,50)panel=wx.Panel(self,-1)box=wx.BoxSi
48、zer(wx.HORIZONTAL)box.Add( wx.Button( panel, -1, Button1 ), 1 )box.Add( wx.Button( panel, -1, Button2 ), 1 )box.Add( wx.Button( panel, -1, Button3 ), 1 )panel.SetSizer(box)self.Centre()class MyApp(wx.App):def OnInit(self):frame = MyFrame( None, -1, wxboxsizer.py )frame.Show(True)return Trueapp = MyA
49、pp(0)app.MainLoop() 我既可水平的摆放构件,也可竖直的摆放。box = wx.BoxSizer( integer orient )其中的方向(orient)可以是 wx.VERTICAL 或 wx.HORIZONTAL。将构件加入 wx.BoxSizer 要使用 Add() 方法。为了理解,我们来看一下它的参数。Add(wx.Window window,integer proportion=0,integer flag=0,integer border=0)其中的 proportion 参数定义了在定义的方向上构件改变的比例。假设我们有三个按纽,它们的 proportion
50、属性分别为0、1和2。它们被加入一个水平的 wx.BoxSportion 参数为 0 的按纽根本不发生变化。而这个参数值为 2 的按纽在水平方向改变的程序将是参数值为 1 的那个按纽的两倍。flag 参数可以更深入的设置构件的属性。我们可以控制构件之间的边框。我们可以在构件之间增加一些空白象素。在要使用边框的地方我们需要定义边界。我们可以使用 | 符号来连接它们。比如 wx.LEFT | wx.BOTTOM 。flag参数的值可以是:* wx.LEFT* wx.RIGHT* wx.BOTTOM* wx.TOP* wx.ALL如果我们使用 wx.EXPAND 标识,我们的构件将占据所有分配给它的
51、空间。最后,我们还可以定义构件的对齐方式。有以下几种:* wx.ALIGN_LEFT* wx.ALIGN_RIGHT* wx.ALIGN_TOP* wx.ALIGN_BOTTOM* wx.ALIGN_CENTER_VERTICAL* wx.ALIGN_CENTER_HORIZONTAL* wx.ALIGN_CENTER看一个例子:Python代码 HYPERLINK javascript:void() o 收藏这段代码 #!/usr/bin/python #FileName:layout3.py importwx classMyFrame(wx.Frame): def_init_(self,p
52、arent,ID,title): wx.Frame._init_(self,parent,ID,title,(-1,-1),wx.Size(450,300) panel=wx.Panel(self,-1) box=wx.BoxSizer(wx.HORIZONTAL) box.Add(wx.Button(panel,-1,Button1),1,wx.ALL,5) box.Add(wx.Button(panel,-1,Button2),0,wx.EXPAND) box.Add(wx.Button(panel,-1,Button3),0,wx.ALIGN_CENTER) panel.SetSizer
53、(box) self.Center() classMyApp(wx.App): defOnInit(self): frame=MyFrame(None,-1,layout3.py) frame.Show(True) returnTrueapp=MyApp(0) app.MainLoop()#!/usr/bin/python# FileName: layout3.pyimport wxclass MyFrame( wx.Frame ):def _init_( self, parent, ID, title ):wx.Frame._init_(self,parent,ID,title,(-1,-1
54、),wx.Size(450,300)panel = wx.Panel(self,-1)box = wx.BoxSizer( wx.HORIZONTAL )box.Add( wx.Button( panel, -1, Button1 ), 1, wx.ALL, 5 )box.Add( wx.Button( panel, -1, Button2 ), 0, wx.EXPAND )box.Add( wx.Button( panel, -1, Button3 ), 0, wx.ALIGN_CENTER )panel.SetSizer( box )self.Center()class MyApp( wx
55、.App ):def OnInit( self ):frame = MyFrame( None, -1, layout3.py )frame.Show( True )return Trueapp = My App( 0 )app.MainLoop() 这个例子中,我们仍旧是创建了三个按纽。第一个的周围有一些边界。它是唯一一个可以在水平方向改变大小的,当主窗口的大小改变时。第二个按纽占据了分配给它的所有空间。第三个在竖起方向据中对齐。我们可以任意组合 wx.BoxSizer 。例如,我们可以将几个水平的 wx.BoxSizer 放在一个竖起的 wx.BoxSizer 中或者相反。这样我们就能产生
56、复杂的布局。Python代码 HYPERLINK javascript:void() o 收藏这段代码 #!/usr/bin/envpython #FileName:borders.py importwx classMyFrame(wx.Frame): def_init_(self,parent,id,title): wx.Frame._init_(self,parent,id,title) vbox=wx.BoxSizer(wx.VERTICAL) hbox1=wx.BoxSizer(wx.HORIZONTAL) hbox2=wx.BoxSizer(wx.HORIZONTAL) pnl1=w
57、x.Panel(self,-1,style=wx.SIMPLE_BORDER) pnl2=wx.Panel(self,-1,style=wx.RAISED_BORDER) pnl3=wx.Panel(self,-1,style=wx.SUNKEN_BORDER) pnl4=wx.Panel(self,-1,style=wx.DOUBLE_BORDER) pnl5=wx.Panel(self,-1,style=wx.STATIC_BORDER) pnl6=wx.Panel(self,-1,style=wx.NO_BORDER) hbox1.Add(pnl1,1,wx.EXPAND|wx.ALL,
58、3) hbox1.Add(pnl2,1,wx.EXPAND|wx.ALL,3) hbox1.Add(pnl3,1,wx.EXPAND|wx.ALL,3) hbox2.Add(pnl4,1,wx.EXPAND|wx.ALL,3) hbox2.Add(pnl5,1,wx.EXPAND|wx.ALL,3) hbox2.Add(pnl6,1,wx.EXPAND|wx.ALL,3) vbox.Add(hbox1,1,wx.EXPAND) vbox.Add(hbox2,1,wx.EXPAND) self.SetSizer(vbox) self.Centre() classMyApp(wx.App): de
59、fOnInit(self): frame=MyFrame(None,-1,borders.py) frame.Show(True) returnTrueapp=MyApp(0) app.MainLoop()#!/usr/bin/env python# FileName: borders.pyimport wxclass MyFrame( wx.Frame ):def _init_( self, parent, id, title ):wx.Frame._init_( self, parent, id, title )vbox = wx.BoxSizer( wx.VERTICAL )hbox1
60、= wx.BoxSizer( wx.HORIZONTAL )hbox2 = wx.BoxSizer( wx.HORIZONTAL )pnl1 = wx.Panel( self, -1, style=wx.SIMPLE_BORDER )pnl2 = wx.Panel( self, -1, style=wx.RAISED_BORDER )pnl3 = wx.Panel( self, -1, style=wx.SUNKEN_BORDER )pnl4 = wx.Panel( self, -1, style=wx.DOUBLE_BORDER )pnl5 = wx.Panel( self, -1, sty
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 晋教版地理七年级下册9.3《撒哈拉以南的非洲──黑种人的故乡》听课评课记录
- 新版华东师大版八年级数学下册《16.1.2分式的基本性质约分》听评课记录4
- 北师大版历史九年级下册第13课《新兴力量的崛起》听课评课记录
- 人教版数学七年级上册2.1《去括号》听评课记录
- 人教部编版九年级历史下册听课评课记录:第13课《罗斯福新政》
- 人教版数学九年级上册24.2《直线和圆的位置关系(1)》听评课记录
- 人教版数学八年级上册《完全平方公式》听评课记录6
- 小学二年级上册除法口算
- 九年级第一学期班主任总结
- 五年级下册口算题
- 【市质检】泉州市2025届高中毕业班质量监测(二) 生物试卷(含答案解析)
- 六年级2025寒假特色作业
- DCS-应急预案演练方案
- 2025年江苏辖区农村商业银行招聘笔试参考题库含答案解析
- 人教版六年级数学下册完整版教案及反思
- 少儿财商教育讲座课件
- 2025年中国科协所属单位招聘15名社会在职人员历年高频重点提升(共500题)附带答案详解
- (八省联考)云南省2025年普通高校招生适应性测试 物理试卷(含答案解析)
- 2025药剂科工作人员工作计划
- 质量检验培训课件(课件)
- 春节节后安全教育培训
评论
0/150
提交评论