Differences between revisions 4 and 15 (spanning 11 versions)
Revision 4 as of 2005-07-23 08:36:22
Size: 5842
Editor: limodou
Comment:
Revision 15 as of 2009-12-25 07:13:57
Size: 5425
Editor: localhost
Comment: converted to 1.6 markup
Deletions are marked like this. Additions are marked like this.
Line 2: Line 2:

::-- limodou [[[DateTime(2005-07-23T08:30:16Z)]]]
[[TableOfContents]]
'''wxEasyWizard -- wx易向导'''
::-- limodou [<<DateTime(2005-07-23T08:30:16Z)>>]
<<TableOfContents>>
Line 14: Line 14:
 *可以加快GUI的Dialog的开发,特别是我将用它与 Meteor (流星我的另一个项目,是一个模板系统)相结合,最终可以方便地进行模板处理乃至代码框架的生成。  * 可以加快GUI的Dialog的开发,特别是我将用它与 Meteor (流星我的另一个项目,是一个模板系统)相结合,最终可以方便地进行模板处理乃至代码框架的生成。
 * 更详细地背景说明请参见我的Blog[[http://blog.donews.com/limodou/archive/2005/07/23/477792.aspx|EasyWizard项目预览]]
Line 16: Line 17:
== 详细说明 ==
再详细点说:
== 下载 ==
 * [[attachment:EasyWizard-0.1.tar.gz]] 目录还是测试版,有兴趣可以用一用。
Line 19: Line 20:
在我的其它项目中,我发现界面永远是一个让人厌烦和琐碎的工作,特别是对话框,因为你面临的输入值可能各式各样,千差万别。手工写代码也许不麻烦,因为可以拷贝粘贴嘛,但修改维护不方便,我更希望有重用性好的方法。使用象 PyCard 或其它的界面生成器当然也可以,但仍然需要一个个的画,并且可能要写事件处理,取值什么的,复杂点的就不行了。因此我一直都想有一个通用的框架,界面不一定很好看,但一定要方便,灵活,不需要关心生成的细节,我只要关心输入项的输性和结果就可以了,有时哪怕结果不精确也没有关系,因为不是做成商业软件差一些也没什么关系。而且自从开发了Meteor之后(它是一个数据驱动的模板系统,特别适合通过数据类型和结构来控制模板的生成--循环),我也一直想开发一个可以与之相结合的界面工具,它用来得到用户输入数据,再利用Meteor就可以生成一些简单的代码框架,进行模板替换的处理了。 == 更新说明 ==
Line 21: Line 22:
再加上这几天看到了 Django ,更让我感觉到:在大数情况下,我们需要的是功能的快速实现,但如果我们只能使用它重头搭建的话,虽然工具很强,但仍然不方便。如果在强大工具的基础上,再有一套更方便的预装组件,它们应该是为了解决某一问题而定制的,因此存在灵活性与扩展性的问题,但却足以满足目前的快速开发的需求,这样我想会减少我们大量的重复工作。先实现我们的功能,至于不满足的地方可以以后再进行修改。因此这样的工具使用的前提就是,尽量与我们的功能处理分离,以降低可替换成本,同时又要方便使用,以降低学习的成本。图形界面最适合做成这样的工具。Django 在目前看来已经预置了许多功能,因此你花费很少的时间和成本却可以快速搭建一个web应用,同时它足够灵活,你可以一点点地进行替换,或改进Django的功能使之满足你的要求。

EasyWizard目前实现了Wizard页面的快速生成,同时提供了一个方便的EasyDialog的生成。一直就想做,但一直就没想好过。其实在 NewEdit 中已经有现在的一些雏型了:它的配置管理(preference)界面就是通过配置信息自动生成的,可以处理简单的:整数、选择、检查、文本等信息的输入。最近在公司的项目中,我一直使用 Python + wxPython + Sqlite 开发了一个数据交易维护工具,其中有许多的表,它们都需要增加、修改数据记录的功能,如果一个个表来做对话框很麻烦,因此开发了一个根据配置信息自动生成对话框的模块,使用它可以大大简化对话框的处理。这就是我开发EasyWizard的基础,目前已经做了一些简单的测试,需要将功能再考虑详细一些,写一些文档就会对外发布。我希望这个工具可以更加方便今后我在GUI方面的开发,毕竟对于我来说功能够用就行,界面我并不太在行。因此它并不是想替换什么东西,它只是一个特殊需求(快速,简单)的工具而已。这不由得让我想起wax模块。它也是一个基于wxPython的工具库,目的是以更pythonic的方式来生成界面。曾经下载过,但没有使用过,原因就是我无法保证它与以后的wxPython库是兼容的,同时依赖于它的话可能会造成别人也需要安装这个包才可以,为了减少麻烦我没有使用过它。但有时间应该好好向它学一学。
 * 2005/08/07 增加打开文件,保存文件,目录,时间,日期,多选的输入类型。支持Notebook类型窗口。
 * 2005/08/01 上传新的测试版本,修改EasyCommander.py,增加对obj2ini的支持,增加TemplateScript的测试程序,可以生成S5格式文档。
Line 40: Line 40:
Line 47: Line 48:

== 安装说明 ==
EasyWizard使用了最新的 SetupTools工具。如果你没有安装,没有关系。下载完EasyWizard的安装包后,解压到一个目录下,然后直接运行:
{{{python setup.py install}}}
这样,安装程序会自动判断你是否安装了SetupTools,如果没有安装或版本不对,则安装程序会自动下载这个工具。

EasyWizard在安装后会将EasyAdmin.py安装到python的Scripts目录下。这样你就可以在命令行上直接运行EasyAdmin.py了。

== 测试 ==
安装后就可以测试一下。在源码包目录下,进入EasyGui/test目录,然后在命令行下敲入:
{{{EasyAdmin.py testTmp.py}}}
即可。
Line 48: Line 61:
这是测试用的配置信息
{{{#!python
#coding=cp936
page1_elements = [
    ('int', 'numbername', '0', u'数字测试', None),
    ('bool', 'checkname', '0', u'检查框测试', None),
    ('choice', 'choicename', 'Y', u'选择测试', [(u'是', 'Y'), (u'否', 'N')]),
    ('string', 'textname', u'这是一个简单文本', u'简单文本测试', None),
    ('lines', 'multitextname', u'这是一个多行文本', u'多行文本测试', None),
    ('static', 'statictextname', u'这是一个静态文本', u'静态文本测试', None),
    ('float', 'floatname', 12.3, u'浮点数测试', None),
    ]

page2_elements = [
    ('int', 'number', '0', u'数字测试', None),
    ('bool', 'check', '0', u'检查框测试', None),
    ('choice', 'choice', 'Y', u'选择测试', {u'是':'Y', u'否':'N'}),
    ('string', 'text', u'这是一个简单文本', u'简单文本测试', None),
    ('list', 'list', [{'name':'limodou', 'age':31, 'sublist':[]},
        {'name':'zoomquiet', 'age':31, 'sublist':[]}], u'这是一个列表测试', {
        'columns':[('name', 60, 'left'), ('age', 40, 'right'), ('sublist', 50, 'center')],
        'elements':[
            ('string', 'name', 'name', u'姓名', None),
            ('int', 'age', 0, u'年龄', None),
            ('list', 'sublist', [], u'这是子列表测试', {
                'columns':[('X', 60, 'left'), ('Y', 40, 'right'), ('Z', 50, 'center')],
                'elements':[
                    ('string', 'x', 'x', u'X', None),
                    ('choice', 'y', 'A', u'Y', ['A', 'B', 'C']),
                    ('bool', 'z', False, u'Z', None),
                ]
            }),
        ]
    }),
    ]
bitmap = 'logo.jpg'
pagesinfo = [
{'title':u'第一页', 'description':u'第一页描述信息', 'elements':page1_elements},
{'title':u'第二页', 'description':u'第二页描述信息', 'elements':page2_elements, 'bitmap':'logo.png'},
]

}}}
Line 51: Line 106:
attachment:EasyWizard02.jpg {{attachment:EasyWizard02.jpg}}
Line 54: Line 110:
attachment:EasyWizard03.jpg {{attachment:EasyWizard03.jpg}}
Line 57: Line 114:
attachment:EasyWizard04.jpg {{attachment:EasyWizard04.jpg}}
Line 60: Line 118:
attachment:EasyWizard01.jpg {{attachment:EasyWizard01.jpg}}
Line 62: Line 121:

= 反馈 =
<<Include(/Discuss)>>

wxEasyWizard -- wx易向导 ::-- limodou [2005-07-23 08:30:16]

EasyWizard项目

概述

EasyWizard的作用就是帮助你使用 wxPython 来方便地生成Wizard界面,那么它附属的一些类你就可以使用了,象EasyDialog之类的。

背景

为什么要搞这个东西,原因有几点:

  • 将要用在我的项目中
  • 可以加快GUI的Dialog的开发,特别是我将用它与 Meteor (流星我的另一个项目,是一个模板系统)相结合,最终可以方便地进行模板处理乃至代码框架的生成。
  • 更详细地背景说明请参见我的BlogEasyWizard项目预览

下载

更新说明

  • 2005/08/07 增加打开文件,保存文件,目录,时间,日期,多选的输入类型。支持Notebook类型窗口。
  • 2005/08/01 上传新的测试版本,修改EasyCommander.py,增加对obj2ini的支持,增加TemplateScript的测试程序,可以生成S5格式文档。

功能介绍

下面我简单地介绍一下EasyWizard的功能,因为现在没有文档,甚至程序注释都很少。

  • 以一个字典的方式生成一个Wizard页面的配置信息
  • 根据这个配置信息可以一次生成多页的Wizard
  • 现在支持的配置项数据类型有:
    • int 整数(IntCtrlSpinCtrl)

    • string 文本(TextCtrl)

    • lines 多行文本(TextCtrl)

    • float 浮点数(EasyFloat)

    • bool 布尔(CheckBox)

    • choice 选择(ComboBox)

    • static静态文本(StaticText)

    • list列表(ListView)

      • list是一个特殊配置项,它还可以支持如上的配置项包括list,因此可以定义多层(我只试过2层)这样可以生成分级型式的数据。这样与 Meteor 中的数据循环就对应的。
    • list控制本身提供增加、删除、修改的功能。
    • 提供一个命令行工具(EasyAdmin.py),可以对你写出的Wizard直接运行,可以看效果

    • 生成的结果按照分级的情况为一个字典

以后还会增加其它一些输入控制项,如:密码、目录、文件等,反正想到什么就加什么。也许以后还会增加一些其它的更方便的界面生成类,如:列表等。

安装说明

EasyWizard使用了最新的 SetupTools工具。如果你没有安装,没有关系。下载完EasyWizard的安装包后,解压到一个目录下,然后直接运行: python setup.py install 这样,安装程序会自动判断你是否安装了SetupTools,如果没有安装或版本不对,则安装程序会自动下载这个工具。

EasyWizard在安装后会将EasyAdmin.py安装到python的Scripts目录下。这样你就可以在命令行上直接运行EasyAdmin.py了。

测试

安装后就可以测试一下。在源码包目录下,进入EasyGui/test目录,然后在命令行下敲入: EasyAdmin.py testTmp.py 即可。

截图

这是测试用的配置信息

   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 ]

截图:

EasyWizard02.jpg

(命令行下运行)

EasyWizard03.jpg

(第一个页面)

EasyWizard04.jpg

(第二个页面,背景图变了)

EasyWizard01.jpg

(list项的增加对话框,其中又有一个list)

反馈

wxPython 友好精灵 讨论 ::-- ZoomQuiet [2005-07-23 09:48:19]

<< <  2025 / 5 >  >>
Mon Tue Wed Thu Fri Sat Sun
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

反馈提要

EasyWizard (last edited 2009-12-25 07:13:57 by localhost)