惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

I
InfoQ
C
CERT Recently Published Vulnerability Notes
The Last Watchdog
The Last Watchdog
P
Proofpoint News Feed
D
Darknet – Hacking Tools, Hacker News & Cyber Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
P
Privacy & Cybersecurity Law Blog
Simon Willison's Weblog
Simon Willison's Weblog
Jina AI
Jina AI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Tor Project blog
博客园_首页
F
Fortinet All Blogs
博客园 - Franky
Latest news
Latest news
Last Week in AI
Last Week in AI
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
L
LINUX DO - 热门话题
U
Unit 42
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Hugging Face - Blog
Hugging Face - Blog
D
Docker
Project Zero
Project Zero
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MongoDB | Blog
MongoDB | Blog
F
Full Disclosure
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
Cisco Talos Blog
Cisco Talos Blog
Y
Y Combinator Blog
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
H
Help Net Security
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
P
Proofpoint News Feed
PCI Perspectives
PCI Perspectives
Cloudbric
Cloudbric
V
Visual Studio Blog
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理

博客园 - 左洸

Vim配置Java IDE U(优)盘安装FreeBSD-9.0+GNOME_lite桌面 12306 说:有时候,能排队也是一种幸福! 如果 12306 依赖反转 —— 都给劳资消停点,谁也别来找我,我会去找你们的 ubuntu删除openjdk,安装 Sun JDK 用 PyMedia 解码并播放 mp3 文件 软件BUG造成本次动车追尾,警方已经拘留了两名 无证 程序员 SQLite 入门教程(四)增删改查,有讲究 SQLite 入门教程(三)好多约束 Constraints SQLite 入门教程(二)创建、修改、删除表 SQLite 入门教程(一)基本控制台(终端)命令 如何稳定地使用 Google 搜索 “拼木头”算法挑战赛:禁忌搜索算法,用Javascript 跑 计算机图形学(二)划线算法 计算机图形学(一) 图形系统综述 模拟退火算法应用于最优排列问题和最优组合问题 之 排列篇 wxPython 笔记(11)重定向程序输出到标准控制台窗口 wxPython 笔记(10)应用程序对象 wxPython 笔记(8)设定窗体的样式
wxPython 笔记(9)向窗体中加入控件
左洸 · 2010-12-25 · via 博客园 - 左洸

前面几篇的学习笔记中,对 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()

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