这是我新建的一个项目,主页在
http://code.google.com/p/meide<wbr></wbr>/
背景:
使用wxPython开发GUI时经常要生成界面,
一种是通过工具生成(但我认为这种重用性并不好)<wbr></wbr>,另一种就是手工写代码。我主要是手工写代码,但是需要你有耐心<wbr></wbr>。以前创建过叫
EasyGuider 的项目,它可以通过字典形式的数据结构快速生成界面<wbr></wbr>,不过存在一些问题:格式固定,不支持事件。于是我从快速辅助手<wbr></wbr>写代码的需求上创建了这个新项目。它适合用来生成简单<wbr></wbr>,有规律的界面。从我个人的开发体会(UliPad)<wbr></wbr>,大量的界面工作并不是很复杂,但是生成组件,布局比较麻烦<wbr></wbr>,因此就想从这里入手,考虑如何快速开发界面。
目标:
方便定义界面
支持事件
支持validate(考虑中)
因此这个项目是从代码级的复用和简化方面来考虑的<wbr></wbr>。目前已经有一些基础代码,有兴趣的可以看一看。不过需要实现的<wbr></wbr>功能还很多。大家有什么好的想法可以交流。
整个框架的设计分为几个层次:
元素
布局
窗体(还未实现)
辅助工具
常见的控件将有对应的类实现。布局目前已经支持HBox, VBox, HGroup, VGroup, Grid, SimpleGrid。布局对象之间可以嵌套。
举一个简单的例子说明使用(可以看tests/test<wbr></wbr>_hbox.py)
import wx
import sys
sys.path.insert(0, '..')
class wxApp(wx.App):
def OnInit(self):
return True
class Frame(wx.Frame):
def __init__(self):
super(Frame, self).__init__(None, -1)
self.init()
def init(self):
import meide
self.box = box = meide.VBox(padding=4)
box.add('', meide.Label('Hello'))
box.add('text', meide.Text('Hello', size=(100, -1)))
meide.create(self, box)
if __name__ == '__main__':
wxApp = wxApp(0)
frame = Frame()
frame.Show()
wxApp.SetTopWindow(frame)
wxApp.MainLoop()
这是一个VBox的示例。VBox在创建时可以设置一个padd<wbr></wbr>ing的参数,它表示这个VBox与周围的空白间距为4个像素。
box.add('', meide.Label('Hello'))
这行是加了一个标签。第一个参数是名字,如果不需要可以为''<wbr></wbr>。不过meide会自动生成一个id_开头的名字,不过一般不用<wbr></wbr>。Label将会使用wx.StaticText控件来生成。也就是说每一个meide的控件将对应一个实际或组合的wxP<wbr></wbr>ython控件。Label至少需要一个字符串参数<wbr></wbr>。其实meide在处理控件时比较特殊,它是按照wxPytho<wbr></wbr>n相应控件的构造参数来组织的,你其实可以根据相应的实际控件填<wbr></wbr>入其它的参数。
box.add('text', meide.Text('Hello', size=(100, -1)))
这行是加入一个文本输入字符,对应于单选输入。第一个参数为它的<wbr></wbr>名字。从这个例子你可以看到它多了一个size的参数<wbr></wbr>。100表示宽度,-1表示不关心。那么meide在处理每个控<wbr></wbr>件时会有一个缺省的缩放因子,对于Text它就是(-1,
0)(从meide.py中可以找到,它是一个类属性叫proportion)。当出现size时<wbr></wbr>,这个缩放因子会与size进行比较,如果缩放因子的x<wbr></wbr>,y的值为-1表示可以缩放,同时相应的size的值也为<wbr></wbr>-1的话,就在相应的方向上进行缩放。如果没有size参数<wbr></wbr>,则按照缩放因子来进行设置。所以很有趣。缩放因子用来控制在哪<wbr></wbr>个方向上可以缩放,而size的定义可以取消某个方面的缩放。
在添加完元素之后,执行:meide.create(self, box),这样元素就画出来了,同时box对应的sizer自动<wbr></wbr>与窗体相关联。
以上只是一个简单的示例,还有许多功能在开发中。
同时要指出,目前meide并不是一个完整的界面解决工具<wbr></wbr>,它侧重于代码的局部。如果你想使用更抽象的mvc的方式<wbr></wbr>,建议研究一下enthought的traits。
背景:
使用wxPython开发GUI时经常要生成界面,
一种是通过工具生成(但我认为这种重用性并不好)<wbr></wbr>,另一种就是手工写代码。我主要是手工写代码,但是需要你有耐心<wbr></wbr>。以前创建过叫
EasyGuider 的项目,它可以通过字典形式的数据结构快速生成界面<wbr></wbr>,不过存在一些问题:格式固定,不支持事件。于是我从快速辅助手<wbr></wbr>写代码的需求上创建了这个新项目。它适合用来生成简单<wbr></wbr>,有规律的界面。从我个人的开发体会(UliPad)<wbr></wbr>,大量的界面工作并不是很复杂,但是生成组件,布局比较麻烦<wbr></wbr>,因此就想从这里入手,考虑如何快速开发界面。
目标:
方便定义界面
支持事件
支持validate(考虑中)
因此这个项目是从代码级的复用和简化方面来考虑的<wbr></wbr>。目前已经有一些基础代码,有兴趣的可以看一看。不过需要实现的<wbr></wbr>功能还很多。大家有什么好的想法可以交流。
整个框架的设计分为几个层次:
元素
布局
窗体(还未实现)
辅助工具
常见的控件将有对应的类实现。布局目前已经支持HBox, VBox, HGroup, VGroup, Grid, SimpleGrid。布局对象之间可以嵌套。
举一个简单的例子说明使用(可以看tests/test<wbr></wbr>_hbox.py)
import wx
import sys
sys.path.insert(0, '..')
class wxApp(wx.App):
def OnInit(self):
return True
class Frame(wx.Frame):
def __init__(self):
super(Frame, self).__init__(None, -1)
self.init()
def init(self):
import meide
self.box = box = meide.VBox(padding=4)
box.add('', meide.Label('Hello'))
box.add('text', meide.Text('Hello', size=(100, -1)))
meide.create(self, box)
if __name__ == '__main__':
wxApp = wxApp(0)
frame = Frame()
frame.Show()
wxApp.SetTopWindow(frame)
wxApp.MainLoop()
这是一个VBox的示例。VBox在创建时可以设置一个padd<wbr></wbr>ing的参数,它表示这个VBox与周围的空白间距为4个像素。
box.add('', meide.Label('Hello'))
这行是加了一个标签。第一个参数是名字,如果不需要可以为''<wbr></wbr>。不过meide会自动生成一个id_开头的名字,不过一般不用<wbr></wbr>。Label将会使用wx.StaticText控件来生成。也就是说每一个meide的控件将对应一个实际或组合的wxP<wbr></wbr>ython控件。Label至少需要一个字符串参数<wbr></wbr>。其实meide在处理控件时比较特殊,它是按照wxPytho<wbr></wbr>n相应控件的构造参数来组织的,你其实可以根据相应的实际控件填<wbr></wbr>入其它的参数。
box.add('text', meide.Text('Hello', size=(100, -1)))
这行是加入一个文本输入字符,对应于单选输入。第一个参数为它的<wbr></wbr>名字。从这个例子你可以看到它多了一个size的参数<wbr></wbr>。100表示宽度,-1表示不关心。那么meide在处理每个控<wbr></wbr>件时会有一个缺省的缩放因子,对于Text它就是(-1,
0)(从meide.py中可以找到,它是一个类属性叫proportion)。当出现size时<wbr></wbr>,这个缩放因子会与size进行比较,如果缩放因子的x<wbr></wbr>,y的值为-1表示可以缩放,同时相应的size的值也为<wbr></wbr>-1的话,就在相应的方向上进行缩放。如果没有size参数<wbr></wbr>,则按照缩放因子来进行设置。所以很有趣。缩放因子用来控制在哪<wbr></wbr>个方向上可以缩放,而size的定义可以取消某个方面的缩放。
在添加完元素之后,执行:meide.create(self, box),这样元素就画出来了,同时box对应的sizer自动<wbr></wbr>与窗体相关联。
以上只是一个简单的示例,还有许多功能在开发中。
同时要指出,目前meide并不是一个完整的界面解决工具<wbr></wbr>,它侧重于代码的局部。如果你想使用更抽象的mvc的方式<wbr></wbr>,建议研究一下enthought的traits。