Python论坛  - 讨论区

标题:[python-chinese] Ë­ÓС¶_Python_and_Tkinter_Programming_¡·Ò»ÊéµÄµç×Ó°æ

2004年08月24日 星期二 13:48

CHEN Guang (Oliver) oliver_guang_chen at yahoo.com.cn
Tue Aug 24 13:48:56 HKT 2004

多谢多谢

 --- hoxide <hoxide_dirac at yahoo.com.cn> 的正文:
> CHEN Guang \(Oliver\),您好!
> 
> 	没办法附件太大了,书名叫,<> Tkinter>>, 是chm, 你自己搜一下吧,也许对你有用
> 
> 
> ======= 2004-08-22 19:49:07 您在来信中写道:=======
> 
> >
> >各位大侠:
> >    小弟急需 Tkinter.Canvas 的参考资料,从 Google
> >查到《 Python and Tkinter Programming
>
>》一书的价绍,觉得甚为合适,不知哪位大侠如有它的电子版,能否发给小弟一份?当然,其他有关
> >Tkinter.Canvas 的参考资料小弟也很需要啊。
> >
>
>_________________________________________________________
> >Do You Yahoo!?
> >150万曲MP3疯狂搜,带您闯入音乐殿堂
>
>http://cn.rd.yahoo.com/mail_cn/tag/yisou/music/*http://music.yisou.com/
> >美女明星应有尽有,搜遍美图、艳图和酷图
>
>http://cn.rd.yahoo.com/mail_cn/tag/yisou/image/*http://image.yisou.com
> >1G就是1000兆,雅虎电邮自助扩容!
>
>http://cn.rd.yahoo.com/mail_cn/tag/1g/*http://cn.mail.yahoo.com/event/mail_1g/
> >_______________________________________________
> >python-chinese list
> >python-chinese at lists.python.cn
> >http://python.cn/mailman/listinfo/python-chinese
> 
> = = = = = = = = = = = = = = = = = = = =
> 			
> 
>         致
> 礼!
>  
> 				 
>         hoxide
>         hoxide_dirac at yahoo.com.cn
>           2004-08-22
> 
> > _______________________________________________
> python-chinese list
> python-chinese at lists.python.cn
> http://python.cn/mailman/listinfo/python-chinese
>  

_________________________________________________________
Do You Yahoo!?
150万曲MP3疯狂搜,带您闯入音乐殿堂
http://cn.rd.yahoo.com/mail_cn/tag/yisou/music/*http://music.yisou.com/
美女明星应有尽有,搜遍美图、艳图和酷图
http://cn.rd.yahoo.com/mail_cn/tag/yisou/image/*http://image.yisou.com
1G就是1000兆,雅虎电邮自助扩容!
http://cn.rd.yahoo.com/mail_cn/tag/1g/*http://cn.mail.yahoo.com/event/mail_1g/


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年08月24日 星期二 17:29

limodou chatme at 263.net
Tue Aug 24 17:29:39 HKT 2004

python-chinese,您好!

我写了一个小的模板类,现在可以实现嵌套处理,但是不支持根据列表数据而实现模板的循环。

模板类:

import re
import sets
import copy

re_node = re.compile('%\((\w+)\)s')

class Template:
	def __init__(self):
		pass
	
	def load(self, tplname):
		mod = __import__(tplname)
		components = tplname.split('.')
		for comp in components[1:]:
			mod = getattr(mod, comp)

		self.vars = {}
		self.nodes = {}
		for v in dir(mod):
			if v.startswith('__') and v.endswith('__'):
				continue
			self.vars[v] = getattr(mod, v)
			self.nodes[v] = list(sets.Set(self._get_rely_on_node(self.vars[v])))

	def _get_rely_on_node(self, s):	#search for %(name)s format, make a dict
		return re_node.findall(s)

	def _get_list(self, path, target):
		if not self.vars.has_key(target):
			return
		if target not in path:
			path.append(target)
		for i in self.nodes[target]:
			self._get_list(path, i)
		return

	def value(self, target='main', values=None):
		path = []
		self._get_list(path, target)
		path.reverse()
		if not values:
			vals = {}
		else:
			vals = copy.deepcopy(values)
		for i in path:
			vals[i] = self.vars[i] % vals
		return vals[target]

if __name__ == '__main__':
	vars = dict(value='aba')
	template = Template()
	template.load('tmp2')
	print template.value('main', vars)

测试文件:

main="""
v = []
%(statement)s
for i in range(10):
%(printvar)s"""

statement = "v.append('%(value)s')\n"

printvar = "    print '\\n'.join(%(var)s)\n"

var = 'v'

有兴趣的可以讨论。

现在的问题是对于可循环的模板,比如上面的statement我想根据提供的数据如果为列表或元组时,会自动进行重复。但一个模板可能涉及多个模板变量,如果有多个模板变量为多值该如何处理。按我
的想法,这种多值应该组织为一个元组的列表。不过,不太清楚otter会分析出什么数据来。不知道ZoomQuiet对这个有没有兴趣。

简单说一下用法:

我定义的模板其实是一个模块,不过只是用来定义数据的。

	vars = dict(value='aba')  #生成模板用到的变量
	template = Template()     #生成一个模板对象
	template.load('tmp2')     #装入一个模板
	print template.value('main', vars)   #得到最终模板的值 当然,模板中还有许多的子模板,都可以得到。
        致
礼!
 				

        limodou
        chatme at 263.net
          2004-08-24

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号