python Tkinter canvas itemconfigure not text wrapping

gk7wooem  于 2023-06-20  发布在  Python
关注(0)|答案(1)|浏览(83)

Canvas.create_text不会在窗口大小改变时换行文本并将其保留在canvas小部件中。width选项将导致在单词处出现换行符,但其行为完全不可预测。下面是我遇到的问题的示例:

root = Tk()
root.geometry('500x350')
def change(event):
    print('event.width = '+str(event.width)) # Debugging
    canvas.itemconfigure(text_id, width=event.width)

canvas = Canvas(root,width=500,height=300)
text_id = canvas.create_text(250,50,text='Lorem ipsum dolor sit amet consectetur adipiscing elit  do eiusmod tempor incididunt ut labore et dolore magna aliqua.',anchor=N)
canvas.bind('<Configure>',change)
canvas.pack()

mainloop()

使用bind事件,我尝试更改Canvas.create_text方法的width选项:
canvas.itemconfigure(text_id, width=event.width)
我尝试了pack方法:
self.canvas.pack(fill=BOTH, expand=True )
我试过canvas.coords方法:self.canvas.coords(self.total_prod_1_text,(text_x-400),50)

ss2ws0br

ss2ws0br1#

您将文本设置为画布的宽度,但将文本居中在固定的x坐标250处。如果你想让文本在窗口小部件的可见区域保持居中,那么你需要考虑文本左右两边的边距,并确保文本的中心位于可见画布的中心。

def change(event):
`enter code here`    margin = event.widget.coords(text_
    x = event.width/2
    y = event.widget.coords(text_id)[1]
    width = event.width - (2*margin)
    canvas.itemconfigure(text_id, width=width)
    canvas.coords(text_id, x, y)

或者,将文本的左侧部分放在左边距,而不是固定文本的顶部中心。然后,您不必重新定位文本。你还得考虑保证金。

def change(event):
    coords = event.widget.coords(text_id)
    margin = coords[0]
    width = event.width - (2*margin)
    canvas.itemconfigure(text_id, width=width)
...
text_id = canvas.create_text(50,50,text='...',anchor=NW)

相关问题