2007年02月02日

原文地址:http://www.bokee.net/bloggermodule/blog_viewblog.do?id=465310

Oracle的导入实用程序(Import utility)允许从数据库提取数据,并且将数据写入操作系统文件。imp使用的基本格式:imp[username[/password[@service]]],以下例举imp常用用法。

1. 获取帮助

 imp help=y

2. 导入一个完整数据库

 imp system/manager file=bible_db log=dible_db full=y ignore=y

3. 导入一个或一组指定用户所属的全部表、索引和其他对象

 imp system/manager file=seapark log=seapark fromuser=seapark imp 
 system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)

4. 将一个用户所属的数据导入另一个用户

 imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
 imp system/manager file=tank log=tank fromuser=(seapark,amy)
 touser=(seapark1, amy1)

5. 导入一个表

 imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)

6. 从多个文件导入

 imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4) 
log=paycheck, filesize=1G full=y

7. 使用参数文件

 imp system/manager parfile=bible_tables.par

bible_tables.par参数文件:

 #Import the sample tables used for the Oracle8i Database Administrator's 
Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import

8. 增量导入

 imp system./manager inctype= RECTORE FULL=Y FILE=A
Oracle imp/exp

C:Documents and Settingsadministrator>exp help=y

Export: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:04:43 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

通过输入 EXP 命令和用户名/口令,您可以后接用户名/口令的命令:

例程: EXP SCOTT/TIGER

或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”按照不同参数。要指定参数,您可以使用关键字:

格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字 说明(默认) 关键字 说明(默认)--------------------------------------------------------------------------USERID 用户名/口令 FULL 导出整个文件 (N)BUFFER 数据缓冲区大小 OWNER 所有者用户名列表FILE 输出文件 (EXPDAT.DMP) TABLES 表名称列表COMPRESS 导入到一个区 (Y) RECORDLENGTH IO 记录的长度GRANTS 导出权限 (Y) INCTYPE 增量导出类型INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)ROWS 导出数据行 (Y) PARFILE 参数文件名CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)

OBJECT_CONSISTENT 只在对象导出期间设置为读的事务处理 (N)FEEDBACK 每 x 行的显示进度 (0)FILESIZE 每个转储文件的最大大小FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCNFLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间QUERY 用于导出表的子集的 select 子句RESUMABLE 遇到与空格相关的错误时挂起 (N)RESUMABLE_NAME 用于标识可恢复语句的文本字符串RESUMABLE_TIMEOUT RESUMABLE 的等待时间TTS_FULL_CHECK 对 TTS 执行完整的或部分相关性检查TABLESPACES 要导出的表空间列表TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)TEMPLATE 调用 iAS 模式导出的模板名

在没有警告的情况下成功终止导出。==================================================

C:Documents and Settingsadministrator>imp help=y

Import: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:06:54 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

可以通过输入 IMP 命令和您的用户名/口令后接用户名/口令的命令:

例程: IMP SCOTT/TIGER

或者, 可以通过输入 IMP 命令和各种参数来控制“导入”按照不同参数。要指定参数,您可以使用关键字:

格式: IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,vlaueN)例程: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表

USERID 必须是命令行中的第一个参数。

关键字 说明(默认) 关键字 说明(默认)--------------------------------------------------------------------------USERID 用户名/口令 FULL 导入整个文件 (N)BUFFER 数据缓冲区大小 FROMUSER 所有人用户名列表FILE 输入文件 (EXPDAT.DMP) TOUSER 用户名列表SHOW 只列出文件内容 (N) TABLES 表名列表IGNORE 忽略创建错误 (N) RECORDLENGTH IO 记录的长度GRANTS 导入权限 (Y) INCTYPE 增量导入类型INDEXES 导入索引 (Y) COMMIT 提交数组插入 (N)ROWS 导入数据行 (Y) PARFILE 参数文件名LOG 屏幕输出的日志文件 CONSTRAINTS 导入限制 (Y)DESTROY 覆盖表空间数据文件 (N)INDEXFILE 将表/索引信息写入指定的文件SKIP_UNUSABLE_INDEXES 跳过不可用索引的维护 (N)FEEDBACK 每 x 行显示进度 (0)TOID_NOVALIDATE 跳过指定类型 ID 的验证FILESIZE 每个转储文件的最大大小STATISTICS 始终导入预计算的统计信息RESUMABLE 在遇到有关空间的错误时挂起 (N)RESUMABLE_NAME 用来标识可恢复语句的文本字符串RESUMABLE_TIMEOUT RESUMABLE 的等待时间COMPILE 编译过程, 程序包和函数 (Y)STREAMS_CONFIGURATION 导入 Streams 的一般元数据 (Y)STREAMS_INSTANITATION 导入 Streams 的实例化元数据 (N)

下列关键字仅用于可传输的表空间TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)TABLESPACES 将要传输到数据库的表空间DATAFILES 将要传输到数据库的数据文件TTS_OWNERS 拥有可传输表空间集中数据的用户

成功终止导入,但出现警告。

oracle的imp和exp的一些用法- -

Oracle8i/9i EXP/IMP使用经验 一、8i EXP常用选项

1、FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:

exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y

2、BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:

exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT

3、FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。

需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。

如果你真想使用EXP直接到磁带,你可以参考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文档号:30428.1),该文中有详细解释。

4、COMPRESS参数将在导出的同时合并碎块,尽量把数据压缩到initial的EXTENT里,默认是N,一般建议使用。DIRECT参数将告诉EXP直接读取数据,而不像传统的EXP那样,使用SELECT来读取表中的数据,这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。

5、如何使用SYSDBA执行EXP/IMP?

这是一个很现实的问题,有时候我们需要使用SYSDBA来执行EXP/IMP,如进行传输表空间的EXP/IMP,以及在9i下用SYS用户来执行EXP/IMP时,都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP:

exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n

6、QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同,如果是UNIX平台所有"和'都需要使用u26469屏蔽它们的特殊含义:

exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"

如果是windows平台,则使用下面的格式:

exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""

二、8i IMP常用选项

1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。

2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。

另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。

三、Oracle9i EXP功能描述

Oracle9i EXP在原有的基础上新增了部分新的参数,按功能主要分为以下几个部分:

1、OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。

2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。

3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。

4、TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。

5、TEMPLATE - 用于支持iAS。

6、TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择,使得EXP更加灵活。

四、不同版本的EXP/IMP问题?

一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决:

1、在高版本数据库上运行底版本的catexp.sql;

2、使用低版本的EXP来导出高版本的数据;

3、使用低版本的IMP将数据库导入到底版本数据库中;

4、在高版本数据库上重新运行高版本的catexp.sql脚本。

但在9i中,上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误:

EXP-00008: ORACLE error %lu encountered

ORA-00904: invalid column name

这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261,你可以到METALINK上去查看有关此BUG的详细信息。

BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。

CREATE OR REPLACE view exu81rls

(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)

AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,

decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')

|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')

|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')

|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),

r.check_opt, r.enable_flag,

DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)

from user$ u, obj$ o, rls$ r

where u.user# = o.owner#

and r.obj# = o.obj#

and (uid = 0 or

uid = o.owner# or

exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')

)

/

grant select on sys.exu81rls to public;

/

五、其他问题

本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况,对于之前的版本,在8.0.X中,除了QUERY参数不能用外,其它差别不大。针对没有QUERY的情况,我们可以先在数据库中使用查询条件建立临时中间表,然后使用EXP导出这个中间表即可。至于Oracle7因为目前使用的人较少,gototop不打算在此做详细解释了,如果读者朋友有需求,你可以参考Metalink文档:“Overview of Export and Import in Oracle7”(文档号:61949.1)。关于EXP/IMP的详细参数信息你可以通过EXP/IMP HELP=Y来获得。

另外关于传输表空间的更多信息可以参考下面的Metelink文档,本文不再详述。

[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.

[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.

在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度

2006年12月30日

    软件项目的各个阶段要面对不同的用户。对于作IT的人来说,尤其是作软件项目。可能把软件中的用户定义为最终操作软件的人。这也没什么不对,但是不够全面。按照软件工程的角度来说,用户至少应该分为3种:
决策者、投资人和最终用户。这3个用户在软件开发和实施个过程中都非常重要,有时候决策者和投资者可能是一个人。但是我们往往只注重最终用户的需求和意见,忽略了前者。

2006年12月29日

1.乌龟的屁股 谜底:规定 ;
2.乌龟倒立 谜底:上面有规定;   
3.乌龟翻筋斗 谜底:一个又一个规定;   
4.大乌龟背上背个小乌龟 谜底:上面又有新规定!   
5.三只乌龟,中间那只忽然便便了。谜底:哎呀,中央的规定又变了!
6.乌龟盖了间房子然后爬了进去 谜底: 盖中盖;
7.乌龟爬出来把房子拆了又盖了一间爬了进去 谜底:新盖中盖;
8 .乌龟又爬出来拆房子盖房子爬进去 谜底:巨能盖!
9.乌龟碰到了一只鳖 谜底:黄金搭档
10.乌龟打架 谜底:规定有冲突 
11.乌龟穿龙袍 谜底:黄金甲
 12.所有的乌龟都穿龙袍 谜底:满城尽带黄金甲!

2006年12月20日

        我在一个不大的公司作项目经理,作IT的人一定都知道,在这样的公司项目经理通常要负责软件的需求、设计等工作。作软件这么多年了,对客户到底需要什么样的软件有一些自己的想法。我认为一个成功的软件必须具备下面几点特征:
1、功能性
      正确的功能性说明软件可以做到用户他作的事,但是要达到这一点对分析和设计人员来说是一个挑战,有的时候客户并不能清楚的表达他们需求,又或者他们根本不知道自己到底需要什么,所以很多软件之后作出来之后客户才会不断的提出他们的需求,而这对于软件的设计和开发无疑存在很大的风险。所以说,为什么很多公司希望招聘到有经验的开发设计人员的原因也在这里(将可能的风险控制到最小)。有时候设计人员会陷入一种自以为是的“催眠状态”,他们常常会自言自语“是的,客户要的一定是这个功能”,“我的设计充分考虑了所有的可能”等等,这个时候你需要问问自己“客户要的真的是这个吗?”,“我没漏掉什么吧?”。正确把握程序功能性的一个有效的手段就是找来一个客户代表,当然他必须是熟知业务过程的(不是所有的客户都明白自己的业务:P),又或者是请一个行业专家,比如他以前就开发过类似的软件。总之,作为一个IT开发设计人员,最大的弱点就是只懂得软件开发,其他行业的业务缺知之甚少,所以,这里我们要作的就是,多听,多问,取长补短。
2、直观的界面
       有了正确(尽量正确)的功能性,之后马上面临的就是为客户提供直观的界面,这一点是不容小视的。这一点也体现在软件的易用性上。你的软件虽然具备了所有的功能,但是如果用户打开你的软件感觉一头雾水,不知从何下手,那么这个软件也是失败的。我的一个客户曾经跟我说过这样的话“你开发的软件要越简单越好,最好是我对着屏幕说一句话他就把活干完了”,呵呵,当然这样的软件估计目前还无法作出来,但是起码他体现了客户对软件易用性的一种心态。我的经验是如果用户在没有你培训的前提下通过菜单和按钮的提示就可以完成软件30%的操作,那么你的软件就是成功的。
      这里还要提到另外一种情况,就是软件的升级,这种升级可以是对自己产品的升级,也可以是对其他厂商产品的替代。人都有惯性,对于以前熟悉的东西是不会轻易改变的。所以在你对产品升级的时候一定要注意,保持和原有软件界面的连贯性,对于操作习惯和界面显示不要作太大的改动,否则你的用户可能是无法接受的。
3、健壮性
    健壮性可能更多的体现在软件的架构设计上,近些年来不断涌现的各种新技术比如Struts,EJB,Hibernate,JSF等等都是为了在一定程度上提供一宗易于扩展的架构。所以我们在作设计的时候最好要考虑好业务逻辑的分层,不要把什么都放在一起。健壮性还体现在程序的稳定性和性能等方面,你的软件平均故障时间越长(MTBF),你的软件越“健壮”

好了,今天就现说到这里吧,后事如何下回分解:P

2006年12月19日

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。 这些特性使JSON成为理想的数据交换语言。

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。

下面是一个小小的例子:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>

<SCRIPT LANGUAGE="JavaScript">
<!–
function getnumber(){
var myjsonobj={"test":[{"x":1,"y":2}]};
 alert(myjsonobj.test[0].x);
}
//–>
</SCRIPT>
</HEAD>

<BODY>

<INPUT TYPE="button" value="test" onclick="getnumber()">
</BODY>
</HTML>

先不说JSON的性能如何,光是这种简单的解析方式就让人爱不释手了:)

 

 

2006年12月13日

在这个状态,所有的过程都已经被框架和应用程序处理完毕。装饰请求状态的目的就是把所有的返回结果显示给用户,这也是它主要完成的功能。这个状态的另一个功能是保存视图的状态,这样就可以在重现视图状态中 在用户需要的时候将页面重现显示。通常的应用中视图的状态是保存在客户端的,那么为了达到重现视图的目的在JSF中视图的状态是保存在服务器端的,大多数 情况下视图状态被保存在用户的会话(session)中。记住,JSF不是一个专门用来进行页面显示的技术,因此我们还有其他几种方式来显示返回的结果:

  •   只使用视图中提供的控制方法输出结果
  •   结合视图中的控制方法和应用程序代码输出结果
  •   使用静态模版资源输出结果
  •   使用动态方法输出结果,就像JSP那样。

所有JSF的实现最终都必须被描述为一个唯一的标签。在我们前面的例子中这个标签的名字是“/hello.jsp”。JSF也可以使用其他非JSP的方式显示视图,随后的讲解中会列出其他非JSP方式的显示。
         编码过程在每个组件中都存在,转换器会在最终的结果中将组件的值转换为字符串显示到客户端。所以在我们前面的例子中HtmlTextIput的Integer值最终被转换成了字符串。
         总之,装饰响应状态是JSF中的最后一个状态,一旦他完毕,那么所有经过处理的结果将最终显示在客户端的浏览器中。经过前面一系列的讲解,你对JSF的每个状态都已经清楚了。随后我们会讲到其他一些JSF的基础知识。

每天临晨执行的任务:
 declare 
         jobnum     integer; 
         begin 
         dbms_job.submit( 
         job=>jobnum, 
         what=>’gentTmpdate2;’, 
         next_date=>trunc(sysdate)+23.9/24, 
         interval=>’trunc(sysdate+1)+23.9/24′ 
        ); 
       commit; 
       end; 
每月最后一天临晨执行的任务:
declare 
         jobnum     integer; 
         begin 
         dbms_job.submit( 
         job=>jobnum, 
         what=>’sp_invoice_zz;’, 
         next_date=>trunc(last_day(sysdate))+23.9/24, 
         interval=>’trunc(last_day(add_months(sysdate,1)))+23.9/24′ 
        ); 
       commit; 
       end; 
       /  

2006年12月12日

   新的hashlib已经加入到pyhon2.5中,这个模块是由Gregory P. Smith完成的。原来的md5和sha仍然可以使用。新的hashlib增加了附加的更安全的混淆选项(SHA-224, SHA-256, SHA-384, and SHA-512)。新的hashlib和原来的md5以及sha使用非常类似。区别比较大的地方是他们的构造函数发生了变化。比如
原来版本:

h = md5.md5()   h = md5.new()  

或h = sha.sha()   h = sha.new()   新版本的:h = hashlib.md5()或h = hashlib.sha1()

一旦hash对象被创建,那么其他方法就和以前的版本是一样的。

项目开发完毕,准备在自己的机子上搭建开发环境。装完oracle后发现 net8Configration没办法连接到刚建好的数据库。提示no listener 。看了一下net assistant,发现已经配置了lintener。但是为什么提示没有呢?
再到服务中看一下,晕,竟然没有TNSListener服务这一项,后来在网上找了一篇文章,说是可以通过修改注册表来加上这个服务。试了一下还是不行。最后还是用老办法command解决了。
具体如下:
执行:lsnrctl
然后start
接下来终于看到我的监听器启动了。晕死!但是为什么windows服务中没有监听器这一项呢?奇怪,这个问题还没有解决。

2006年12月03日

Window styles

 

   说道窗口就必须说说窗口的风格。如果你以前用过delphi,vb开发,那么一定记得每个窗口都可以设置,诸如是否有关闭按钮、是否可以最大化、最小化等等。那么WxPython中是怎么设置的呢?答案是Window Styles

在我们前面讲述wxFrame的构造函数时有一个style参数。对了,就是设置这个,下面的表格列出了所有窗口的风格。

参数

解释

wxDEFAULT_FRAME_STYLE

这是每个窗口的缺省风格,包含标题、可调节大小的边框,最大最小化按钮、关闭按钮和系统菜单。

wxICONIZE

最小化时显示图标(只适用于Windows平台)

wxICONIZE

设置窗口标题

wxMINIMIZE

wxICONIZE相同

wxMINIMIZE_BOX

最小化按钮

wxMAXIMIZE_BOX

最大化按钮

wxCLOSE_BOX

关闭按钮

wxSTAY_ON_TOP

置顶窗口

wxSYSTEM_MENU

是否显示系统菜单

wxRESIZE_BORDER

是否科研调整窗口大小

wxFRAME_TOOL_WINDOW

窗口最小化时,是否在WindowsGTK+)工具栏中显示。

wxFRAME_FLOAT_ON_PARENT

窗口是否显示在最上层,与wxSTAY_ON_TOP不同,它必须有一个父窗口。

wxFRAME_EX_CONTEXTHELP

是否有联机帮助按钮。

wxFRAME_EX_METAL

如果时在MacOS中,这个属性用于是否显示“金属风格”

 

 

 

下面这段代码演示了窗口风格的使用

窗口风格代码示例

import wx

class StyleFrame(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self,None,-1,"This is a style fram",size=(400,300),style=wx.SYSTEM_MENU|wx.MINIMIZE_BOX|wx.CLOSE_BOX|wx.CAPTION)

       

       

       

if __name__=="__main__":

    app=wx.PySimpleApp()

    frame=StyleFrame()

    frame.Show(True)

    app.MainLoop();

 

窗口的成员函数

 

    前面的章节我们讲了窗口的各种属性,目前看来一进足够了。下面我们来看看窗口有哪些成员函数。前面已经讲过了一个构造函数,下面看看还有哪些构造函数。

void Centre(int direction = wxBOTH)

这个函数用于定义窗口居中,其中direction参数有三个选项wxHORIZONTAL, wxVERTICAL 或者 wxBOTH。顾名思义,第一个时水平居中,第二个时垂直居中,最后一个是水平和垂直居中。

bool Create(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = "frame")

这个函数用于动态创建窗口,其中的参数和构造函数相同,这里就不讲了。

virtual wxStatusBar* CreateStatusBar(int number = 1, long style = 0, wxWindowID id = -1, const wxString& name = "statusBar")

前面我们说过,一般的窗口都会有一个状态条,尤其是主窗口,中国方法就是用于创建状态条的,这里先不细讲,在后面专门讲解状态条的部分将详细描述。

virtual wxToolBar* CreateToolBar(long style = wxNO_BORDER | wxTB_HORIZONTAL, wxWindowID id = -1, const wxString& name = "toolBar")

每个窗口尤其是主窗口一般都会有一个工具栏,上面放一些快捷按钮等,这个方法用于创建工具条。

wxMenuBar* GetMenuBar() const

获得菜单对象的方法。

wxStatusBar* GetStatusBar() const

获得状态条对象。

wxToolBar* GetToolBar() const

获得工具栏对象的方法。

void ProcessCommand(int id)

模拟菜单命令的方法,其中的id参数为Menu对象的ID属性。

void SetMenuBar(wxMenuBar* menuBar)

创建菜单对象的方法,其参数为wxMenuBar对象。

void SetStatusBar(wxStatusBar* statusBar)

设置状态条对象,其参数为wxStatusBar对象。

virtual void SetStatusText(const wxString& text, int number = 0)

设置状态条的文字。
virtual void SetStatusWidths(int n, int *widths)

设置状态条文字的宽度。

void SetToolBar(wxToolBar* toolBar)

设置工具栏对象,其参数为wxToolBar对象。

 

示例代码:

包含工具栏、菜单和状态条的窗口

import wx

ID_New =wx.NewId()

class StyleFrame(wx.Frame):

    def __init__(self):

        wx.Frame.__init__(self,None,-1,"This is a style fram",size=(400,300),style=wx.SYSTEM_MENU|wx.MINIMIZE_BOX|wx.CLOSE_BOX|wx.CAPTION)

        menu=wx.Menu()

        menu.Append(ID_New,"&New")

        menubar=wx.MenuBar()

        menubar.Append(menu,"&File")

        self.SetMenuBar(menubar)

        self.CreateStatusBar();

        tb = self.CreateToolBar( wx.TB_HORIZONTAL

                                 | wx.NO_BORDER

                                 | wx.TB_FLAT

                                 | wx.TB_TEXT

                                 )

        tsize = (16,16)

        new_bmp =  wx.ArtProvider.GetBitmap(wx.ART_NEW, wx.ART_TOOLBAR, tsize)

        tb.AddSimpleTool(10, new_bmp, "New", "Long help for ‘New’")

       

if __name__=="__main__":

    app=wx.PySimpleApp()

    frame=StyleFrame()

    frame.Show(True)

    frame.Center()

    app.MainLoop();

好了。今天就讲到这里。基本上所有有关窗口的属性和方法都介绍完了,当然还有MDI窗口不过没什么大的区别,在以后的例子中我将逐步对其进行介绍。