在Python/Tkinter中裁剪文本

3 投票
2 回答
2106 浏览
提问于 2025-04-15 12:53

我想在tkinter的画布上画一些文字,这些文字要放在之前画好的一个矩形里面。我希望能把文字限制在这个矩形内,最好只需要指定一个最大的宽度就行。请问在tkinter中有没有简单的方法可以做到这一点?如果没有,我是不是可以用其他工具来让这个过程更简单一些?谢谢!

补充说明一下:“裁剪”在图形学中的意思是,画这个对象(字符串)时,假装它有足够的空间可以完整显示,但实际上只画出在指定范围内的部分,就像这样:

alt text http://garblesnarky.net/images/pythontextclip.png

2 个回答

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

撰写回答