当前位置: 首页 > news >正文

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()
复制代码

 

 


//==========================================


本文转自左洸博客园博客,原文链接:http://www.cnblogs.com/myqiao/archive/2010/12/25/1916940.html,如需转载请自行联系原作者


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 硬链接与软链接
  • linux 文件属性
  • mysql配置文件调优
  • LDAP实现企业异构平台的统一认证
  • 配置rsync源服务器
  • js获取区域坐标
  • 海洋祝福电子贺卡
  • 虚拟局域网(VLAN)和以太网通道
  • WAS 常用命令
  • SQL Server In-Memory OLTP Internals for SQL Server 2016
  • 酣畅淋漓.....
  • Eclipse 调优及使用小细节
  • Linux周期性任务计划
  • 我在Dell笔记本上安装Windows 7全过程
  • 设计模式.迪米特法则
  • ----------
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【前端学习】-粗谈选择器
  • ES6系统学习----从Apollo Client看解构赋值
  • FineReport中如何实现自动滚屏效果
  • Git的一些常用操作
  • go语言学习初探(一)
  • Gradle 5.0 正式版发布
  • Hibernate最全面试题
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript函数式编程(一)
  • Java方法详解
  • Js基础知识(四) - js运行原理与机制
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • mac修复ab及siege安装
  • MySQL用户中的%到底包不包括localhost?
  • nginx 配置多 域名 + 多 https
  • Python_网络编程
  • uva 10370 Above Average
  • webpack4 一点通
  • 后端_MYSQL
  • 蓝海存储开关机注意事项总结
  • 前端js -- this指向总结。
  • 全栈开发——Linux
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 回归生活:清理微信公众号
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (23)Linux的软硬连接
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (回溯) LeetCode 78. 子集
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)ORM