wxPython 笔记(9)向窗体中加入控件

前面几篇的学习笔记中,对 wx.Frame 已经有了一个大概的了解,wx.Frame 就是一个窗体框架,他有标题栏、有客户绘制区、有菜单条、有工具条、有状态栏、可以最大最小化、可以改变尺寸等等。

 

但是,这个 wx.Frame 窗体和 VB 、Delphi 、WinForm 等等的窗体有一点不一样的地方:一般情况下我们并不直接在窗体上放置控件。

 

如果你直接将控件放置在 wx.Frame 上,则控件的大小和位置设置都将不起作用,控件将充满整个 Frame 的客户区域,如果你放置两个按钮,则这两个按钮将共同填充整个客户区域。

 

所以,一般情况下,我们会先放置一个 wx.Panel 面板在 Frame 上面,同样的,Panel 将会充满整个框架,然后我们再将按钮、文本框等控件放置在 Panel 上,这样就可以设置位置和大小了。

 

当然,如果我们要为每一个控件设置位置和大小是一件很繁琐的事情,所以 wxPython 还提供了另外一种方法,就是现在 Frame 放置布局管理器,布局管理器可以构造出很复杂的界面。

 

那么我们如何将放置到窗体上呢?wxPython 所有窗口对象构造函数的第一个参数总是一个指向父窗口的引用。前面我们说过,Frame 如果是顶层窗口,则第一个可以传入一个 None,代表没有父窗口。

如果要在 Frame 上面放置一个 Panel ,则 Panel 的第一个参数传入 Frame ,说明 Frame 是 Panel 的父窗口,那么 Panel 就会出现在 Frame 上面了。

同样,如果要在 Panel 上面放置一个 Button ,则 Button 的第一个参数传入 Panel ,那么 Button 就会出现在 Panel 上面了。

 

下面看看 Panel 的构造函数:

__init__(selfparentid=-1pos=DefaultPositionsize=DefaultSizestyle=wxTAB_TRAVERSAL|wxNO_BORDERname=PanelNameStr)

我们看到,除了第一个参数 parent ,其他参数都有默认值,就像上面说过的,如果放置在 Frame 上面,大小和尺寸我们设定了也没用。

 

下面再看看 Button 的构造函数: 

 

__init__(selfparentid=-1label=EmptyStringpos=DefaultPositionsize=DefaultSizestyle=0validator=DefaultValidator,name=ButtonNameStr) 

 

同 Panel 一样,除了第一个参数 parent ,其他参数都有默认值。

 

下面的代码在 Frame 上加入了 Panel  Button 和 StaticText 三个组件

代码如下:

ExpandedBlockStart.gif 代码
 1  # !/usr/bin/python
 2  #  -*- coding: GBK -*-
 3 
 4  import  wx
 5 
 6  """
 7  在窗体中添加其他部件
 8  """
 9 
10  class  MyFrame(wx.Frame):
11      
12       def   __init__ (self):
13          wx.Frame. __init__ (self,parent = None,id = wx.ID_ANY,title = " Hello wxPython " ,size = ( 200 , 160 ))
14           # 添加一个面板
15           #第一个参数 self ,代表父窗体为 MyFrame 的一个对象实例
16          panel = wx.Panel( self )
17          
18           # 添加一个按钮
19           #第一个参数 panel ,代表父窗体为 panel ,按钮将出现在 panel 之上
20          wx.Button( panel ,wx.ID_ANY, " Button " ,pos = ( 10 , 10 ),size = ( 80 , 40 ))
21          
22           # 添加一个文本标签
23           # 第一个参数 panel ,代表父窗体为 panel ,文本标签将出现在 panel 之上
24          wx.StaticText(panel, - 1 , " This is the first line.\nThis is the second line. " ,pos = ( 10 , 80 ),size = ( 160 , 50 ))
25           # 居中
26          self.Center()
27           # 显示
28          self.Show()
29 
30  if   __name__ == ' __main__ ' :
31       # 初始化程序
32      app = wx.App()
33       # 创建窗体
34      MyFrame()    
35       # 开始消息循环
36      app.MainLoop()

 

 


//==========================================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值