在Python/Tkinter中裁剪文本
我想在tkinter的画布上画一些文字,这些文字要放在之前画好的一个矩形里面。我希望能把文字限制在这个矩形内,最好只需要指定一个最大的宽度就行。请问在tkinter中有没有简单的方法可以做到这一点?如果没有,我是不是可以用其他工具来让这个过程更简单一些?谢谢!
补充说明一下:“裁剪”在图形学中的意思是,画这个对象(字符串)时,假装它有足够的空间可以完整显示,但实际上只画出在指定范围内的部分,就像这样:
alt text http://garblesnarky.net/images/pythontextclip.png2 个回答
0
这是对noob oddy 的回答的小修改(使用滑块来展示文本裁剪实际上是如何工作的)。
from Tkinter import *
root = Tk()
c = Canvas(root, width=300, height=100)
c.pack()
r = c.create_rectangle(50,50,91,67, outline='blue')
t = Label(c, text="Hello John, Michael, Eric, ...", anchor='w')
clip = c.create_window(51, 51, height=15, window=t, anchor='nw')
def update_clipping(new_width):
x,y,w,h = c.coords(r)
c.coords(r,x,y,x+int(new_width)+1,h)
c.itemconfig(clip,width=new_width)
s = Scale(root,from_=10, to=200, orient=HORIZONTAL, command=update_clipping)
s.pack()
root.mainloop()
3
大概是这样的:
from Tkinter import *
root = Tk()
c = Canvas(root, width=200, height=200)
c.pack()
c.create_rectangle(50,50,91,67, outline='blue')
t = Label(c, text="Hello John, Michael, Eric, ...", anchor='w')
c.create_window(51, 51, width=40, height=15, window=t, anchor='nw')
root.mainloop()
你甚至可以用一个输入框(Entry widget)来代替标签(Label)
这个链接可能会对你很有帮助:
http://effbot.org/zone/editing-canvas-text-items.htm