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 三个组件

代码如下:

复制代码
代码
 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,如需转载请自行联系原作者


目录
相关文章
|
图形学
零基础VB教程046期:如何制作自己的记事本第1节?toolbar控件与imagelist控件
零基础VB教程046期:如何制作自己的记事本第1节?toolbar控件与imagelist控件
115 0
从零开始学Pyqt5之【控件介绍】(14):QFileDialog文件选择对话框控件
从零开始学Pyqt5之【控件介绍】(14):QFileDialog文件选择对话框控件
从零开始学Pyqt5之【控件介绍】(14):QFileDialog文件选择对话框控件
|
C#
winform,wpf全屏 还显示任务栏的解决方法
原文:winform,wpf全屏 还显示任务栏的解决方法 以wpf为例: 全屏代码: this.Topmost = true; this.WindowStyle = System.Windows.WindowStyle.
1918 0
|
C# 项目管理
WPF 窗体基类实现的体验及实现回车到下一控件
原文:WPF 窗体基类实现的体验及实现回车到下一控件 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jsyhello/article/details/7216509 ...
1131 0
|
C#
WPF 使用OCX控件速度很慢
原文:WPF 使用OCX控件速度很慢 最近公司项目,需要在wpf上面嵌入ocx控件,但是程序运行起来后,进行操作后,界面一直很卡,找了各种原因,没有找到原因,后来直接运行exe文件,速度顿时快了很多。
1068 0
TabControl 伸缩式菜单 仿照 uwp SplitView
原文:TabControl 伸缩式菜单 仿照 uwp SplitView 留下备用笔记 之前用的Frame+Page的切换content,但是发现页面content内容控件多的时候,每一次切换都有点卡,点击了半天才反应过来(每次切换都要重新加载控件,具体怎么解决不知道.
830 0
|
C# Windows Web App开发
WPF 应用完全模拟 UWP 的标题栏按钮
原文:WPF 应用完全模拟 UWP 的标题栏按钮 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
1102 0
|
C# Windows
WPF备忘录(2)WPF获取和设置鼠标位置与progressbar的使用方法
原文:WPF备忘录(2)WPF获取和设置鼠标位置与progressbar的使用方法 一、WPF 中获取和设置鼠标位置   方法一:WPF方法   Point p = Mouse.GetPosition(e.
1064 0