+ -
当前位置:首页 → 问答吧 → 对TKinter这一不一致特性感到不解,求有解决办法吗???

对TKinter这一不一致特性感到不解,求有解决办法吗???

时间:2011-06-27

来源:互联网

废话不多说了,就是把显示在Canvas上的对象的轮廓打印出来,代码极简单,相信各位大侠一看就能懂!!!
Python code
#coding=gbk

#执行一下就知道干什么的了
import ttk as ttk 
import Tkinter as Tk

def doJob():
    print ''
    for y in range(0,24):
        for x in range(0,24):
            if canv.find_overlapping(x,y,x,y):
                print '*',
            else:
                print '-',
        print ''
        
root = Tk.Tk()
canv = Tk.Canvas(root,width=24,height=24,bg='blue')
canv.pack(side='left')
canv.create_rectangle(4,4,20,20)                                    #创建不同的物体,打印其轮廓
ttk.Button(root,text=u'执行生成',command=doJob).pack(side='right')
root.mainloop()





Python code
#coding=gbk

#执行一下就知道干什么的了
import ttk as ttk 
import Tkinter as Tk

def doJob():
    print ''
    for y in range(0,24):
        for x in range(0,24):
            if canv.find_overlapping(x,y,x,y):
                print '*',
            else:
                print '-',
        print ''
        
root = Tk.Tk()
canv = Tk.Canvas(root,width=24,height=24,bg='blue')
canv.pack(side='left')
canv.create_text((13,13),text=u'',font=(u'宋体',14,'bold'))      #创建不同的物体,打印其轮廓
ttk.Button(root,text=u'执行生成',command=doJob).pack(side='right')
root.mainloop()






作者: XIANXir   发布时间: 2011-06-27

其他几种形状我都试过,都可以的,就文字对象不可以。。。。怎么办啊???

作者: XIANXir   发布时间: 2011-06-27





作者: XIANXir   发布时间: 2011-06-27

一个字符画到canvas上,tk能看到的是一个矩形的“画”。至于画上哪儿是黑的,哪儿是白的,则不在它的考虑之中。

我觉得canvas现在的行为是符合人们的常识的:两个字重到一起,即使它们的笔画互不相交,我们也认为它们是重叠的。

而且,你想象一下你来实现find_overlapping函数,让它支持多边形,圆形等形状都有简单,高效的办法。对于字的笔画,很难有高效的办法来实现,对不同的字体,字号,它们的笔画形状都可能不一样。

不要再纠结这个问题了。如果还是为取字模的话,用PIL实现也很方便。

作者: panghuhu250   发布时间: 2011-06-27

07年,有人想做同样的事情,没有得到回应。

难道真的是阳光之下,并无新事?

作者: panghuhu250   发布时间: 2011-06-27

引用 4 楼 panghuhu250 的回复:

07年,有人想做同样的事情,没有得到回应。

难道真的是阳光之下,并无新事?



What I am trying to do is get the dot matrix
of chinese char, and then make a font lib for embed system. 
  I had thought of print the char on a tk canvas,
and get dot color one bye one, but I found no mathod to get 
data form canvas.
  As for image, I can put and get dots on it, but I don't 
konw how to put a char on it!
  So, any ideas? or should I consider using something like
gtk!


非常感谢您的提醒,看来Tkinter做这个真得是不行!!此路走不通啊!!!

另外,您说PIL做这个很简单。能否提供些帮助啊——指点一下方向即可。。。我没接触过PIL,而取字模又真得很急切,希望您能提供帮助,非常感谢!!!

作者: XIANXir   发布时间: 2011-06-27

引用 4 楼 panghuhu250 的回复:

07年,有人想做同样的事情,没有得到回应。

难道真的是阳光之下,并无新事?


另外,我用关键词"PIL 取字模"、“PLI 字模”分别Google了一下,没有任何相关的条目

作者: XIANXir   发布时间: 2011-06-27

很少有人有这样的需要,你搜索 取字模 当然找不到。一共用到3个类。假定字体大小是24。

Python code

#! /usr/bin/env python
import ImageFont, ImageDraw, Image
font = ImageFont.truetype("/usr/share/fonts/truetype/arphic/ukai.ttc", 24)
def test(zi):
    im = Image.new('L', (24, 24), 0)
    draw = ImageDraw.Draw(im)
    draw.text((0,0), zi, font=font, fill=256)
    d = list(im.getdata())
    l = [d[start:start+24] for start in range(0, 24*24, 24)]
    print "\n".join("".join(map(lambda i: (i < 50 and "*") or ' ', r)) for r in l)
if __name__=='__main__':
    import sys
    test(unicode(sys.argv[1], 'utf-8'))



Python code

family@OmicsHome:~/projects/csdn$ ./zixing.py 水
************************
************************
************************
************************
*********** ************
***********  ***********
***********  ***********
***********  ***********
***********  ****  *****
***********  ***   *****
***********  **   ******
******       **  *******
***          *  ********
********  *    *********
*******  **    *********
*******  **  *  ********
******  ***  **   ******
******  ***  ***    ****
*****  ****  ****     **
****  *****  *****      
***  ******  ******  ***
*********    ***********
*********    ***********
**********   ***********


作者: panghuhu250   发布时间: 2011-06-27