Size: 7843
Comment: 追加反馈子页面
|
Size: 7892
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
'''wxEasyWizard -- wx设计友好精灵''' | |
Line 21: | Line 21: |
再加上这几天看到了 Django ,更让我感觉到:在大数情况下,我们需要的是功能的快速实现,但如果我们只能使用它重头搭建的话,虽然工具很强,但仍然不方便。如果在强大工具的基础上,再有一套更方便的预装组件,它们应该是为了解决某一问题而定制的,因此存在灵活性与扩展性的问题,但却足以满足目前的快速开发的需求,这样我想会减少我们大量的重复工作。先实现我们的功能,至于不满足的地方可以以后再进行修改。因此这样的工具使用的前提就是,尽量与我们的功能处理分离,以降低可替换成本,同时又要方便使用,以降低学习的成本。图形界面最适合做成这样的工具。Django 在目前看来已经预置了许多功能,因此你花费很少的时间和成本却可以快速搭建一个web应用,同时它足够灵活,你可以一点点地进行替换,或改进Django的功能使之满足你的要求。 | 再加上这几天看到了 Django ,更让我感觉到:'''在大数情况下,我们需要的是功能的快速实现''',但如果我们只能使用它重头搭建的话,虽然工具很强,但仍然不方便。如果在强大工具的基础上,再有一套更方便的预装组件,它们应该是为了解决某一问题而定制的,因此存在灵活性与扩展性的问题,但却足以满足目前的快速开发的需求,这样我想会减少我们大量的重复工作。先实现我们的功能,至于不满足的地方可以以后再进行修改。因此这样的工具使用的前提就是,尽量与我们的功能处理分离,以降低可替换成本,同时又要方便使用,以降低学习的成本。图形界面最适合做成这样的工具。Django 在目前看来已经预置了许多功能,因此你花费很少的时间和成本却可以快速搭建一个web应用,同时它足够灵活,你可以一点点地进行替换,或改进Django的功能使之满足你的要求。 |
wxEasyWizard -- wx设计友好精灵 ::-- limodou [DateTime(2005-07-23T08:30:16Z)] TableOfContents
EasyWizard项目
概述
EasyWizard的作用就是帮助你使用 wxPython 来方便地生成Wizard界面,那么它附属的一些类你就可以使用了,象EasyDialog之类的。
背景
为什么要搞这个东西,原因有几点:
- 将要用在我的项目中
- 可以加快GUI的Dialog的开发,特别是我将用它与 Meteor (流星我的另一个项目,是一个模板系统)相结合,最终可以方便地进行模板处理乃至代码框架的生成。
详细说明
再详细点说:
在我的其它项目中,我发现界面永远是一个让人厌烦和琐碎的工作,特别是对话框,因为你面临的输入值可能各式各样,千差万别。手工写代码也许不麻烦,因为可以拷贝粘贴嘛,但修改维护不方便,我更希望有重用性好的方法。使用象 PyCard 或其它的界面生成器当然也可以,但仍然需要一个个的画,并且可能要写事件处理,取值什么的,复杂点的就不行了。因此我一直都想有一个通用的框架,界面不一定很好看,但一定要方便,灵活,不需要关心生成的细节,我只要关心输入项的输性和结果就可以了,有时哪怕结果不精确也没有关系,因为不是做成商业软件差一些也没什么关系。而且自从开发了Meteor之后(它是一个数据驱动的模板系统,特别适合通过数据类型和结构来控制模板的生成--循环),我也一直想开发一个可以与之相结合的界面工具,它用来得到用户输入数据,再利用Meteor就可以生成一些简单的代码框架,进行模板替换的处理了。
再加上这几天看到了 Django ,更让我感觉到:在大数情况下,我们需要的是功能的快速实现,但如果我们只能使用它重头搭建的话,虽然工具很强,但仍然不方便。如果在强大工具的基础上,再有一套更方便的预装组件,它们应该是为了解决某一问题而定制的,因此存在灵活性与扩展性的问题,但却足以满足目前的快速开发的需求,这样我想会减少我们大量的重复工作。先实现我们的功能,至于不满足的地方可以以后再进行修改。因此这样的工具使用的前提就是,尽量与我们的功能处理分离,以降低可替换成本,同时又要方便使用,以降低学习的成本。图形界面最适合做成这样的工具。Django 在目前看来已经预置了许多功能,因此你花费很少的时间和成本却可以快速搭建一个web应用,同时它足够灵活,你可以一点点地进行替换,或改进Django的功能使之满足你的要求。
EasyWizard目前实现了Wizard页面的快速生成,同时提供了一个方便的EasyDialog的生成。一直就想做,但一直就没想好过。其实在 NewEdit 中已经有现在的一些雏型了:它的配置管理(preference)界面就是通过配置信息自动生成的,可以处理简单的:整数、选择、检查、文本等信息的输入。最近在公司的项目中,我一直使用 Python + wxPython + Sqlite 开发了一个数据交易维护工具,其中有许多的表,它们都需要增加、修改数据记录的功能,如果一个个表来做对话框很麻烦,因此开发了一个根据配置信息自动生成对话框的模块,使用它可以大大简化对话框的处理。这就是我开发EasyWizard的基础,目前已经做了一些简单的测试,需要将功能再考虑详细一些,写一些文档就会对外发布。我希望这个工具可以更加方便今后我在GUI方面的开发,毕竟对于我来说功能够用就行,界面我并不太在行。因此它并不是想替换什么东西,它只是一个特殊需求(快速,简单)的工具而已。这不由得让我想起wax模块。它也是一个基于wxPython的工具库,目的是以更pythonic的方式来生成界面。曾经下载过,但没有使用过,原因就是我无法保证它与以后的wxPython库是兼容的,同时依赖于它的话可能会造成别人也需要安装这个包才可以,为了减少麻烦我没有使用过它。但有时间应该好好向它学一学。
功能介绍
下面我简单地介绍一下EasyWizard的功能,因为现在没有文档,甚至程序注释都很少。
- 以一个字典的方式生成一个Wizard页面的配置信息
- 根据这个配置信息可以一次生成多页的Wizard
- 现在支持的配置项数据类型有:
string 文本(TextCtrl)
lines 多行文本(TextCtrl)
float 浮点数(EasyFloat)
bool 布尔(CheckBox)
choice 选择(ComboBox)
static静态文本(StaticText)
list列表(ListView)
- list是一个特殊配置项,它还可以支持如上的配置项包括list,因此可以定义多层(我只试过2层)这样可以生成分级型式的数据。这样与 Meteor 中的数据循环就对应的。
- list控制本身提供增加、删除、修改的功能。
提供一个命令行工具(EasyAdmin.py),可以对你写出的Wizard直接运行,可以看效果
- 生成的结果按照分级的情况为一个字典
以后还会增加其它一些输入控制项,如:密码、目录、文件等,反正想到什么就加什么。也许以后还会增加一些其它的更方便的界面生成类,如:列表等。
截图
这是测试用的配置信息
1 #coding=cp936
2 page1_elements = [
3 ('int', 'numbername', '0', u'数字测试', None),
4 ('bool', 'checkname', '0', u'检查框测试', None),
5 ('choice', 'choicename', 'Y', u'选择测试', [(u'是', 'Y'), (u'否', 'N')]),
6 ('string', 'textname', u'这是一个简单文本', u'简单文本测试', None),
7 ('lines', 'multitextname', u'这是一个多行文本', u'多行文本测试', None),
8 ('static', 'statictextname', u'这是一个静态文本', u'静态文本测试', None),
9 ('float', 'floatname', 12.3, u'浮点数测试', None),
10 ]
11
12 page2_elements = [
13 ('int', 'number', '0', u'数字测试', None),
14 ('bool', 'check', '0', u'检查框测试', None),
15 ('choice', 'choice', 'Y', u'选择测试', {u'是':'Y', u'否':'N'}),
16 ('string', 'text', u'这是一个简单文本', u'简单文本测试', None),
17 ('list', 'list', [{'name':'limodou', 'age':31, 'sublist':[]},
18 {'name':'zoomquiet', 'age':31, 'sublist':[]}], u'这是一个列表测试', {
19 'columns':[('name', 60, 'left'), ('age', 40, 'right'), ('sublist', 50, 'center')],
20 'elements':[
21 ('string', 'name', 'name', u'姓名', None),
22 ('int', 'age', 0, u'年龄', None),
23 ('list', 'sublist', [], u'这是子列表测试', {
24 'columns':[('X', 60, 'left'), ('Y', 40, 'right'), ('Z', 50, 'center')],
25 'elements':[
26 ('string', 'x', 'x', u'X', None),
27 ('choice', 'y', 'A', u'Y', ['A', 'B', 'C']),
28 ('bool', 'z', False, u'Z', None),
29 ]
30 }),
31 ]
32 }),
33 ]
34 bitmap = 'logo.jpg'
35 pagesinfo = [
36 {'title':u'第一页', 'description':u'第一页描述信息', 'elements':page1_elements},
37 {'title':u'第二页', 'description':u'第二页描述信息', 'elements':page2_elements, 'bitmap':'logo.png'},
38 ]
截图:
attachment:EasyWizard02.jpg
(命令行下运行)
attachment:EasyWizard03.jpg
(第一个页面)
attachment:EasyWizard04.jpg
(第二个页面,背景图变了)
attachment:EasyWizard01.jpg
(list项的增加对话框,其中又有一个list)