我有一个全屏窗口和一个全屏画布。首先,我在这个画布上放置了一张全屏背景图像。
canvas = tk.Canvas(window, bg="white", bd=0)
canvas.pack(fill=tk.BOTH, expand=True)
canvas.update()
image = Image.open('bild.jpg')
newimage = image.resize((canvas.winfo_width(),canvas.winfo_height()),Image.LANCZOS)
photo = ImageTk.PhotoImage(newimage, master=canvas)
canvas.create_image(0, 0, anchor="nw", image=photo)
canvas.update()
然后我在右上角放一个标题文字,并在其下方放一段较长的文字。文字的长度远远超过了屏幕高度。
rectangle_width = int(canvas.winfo_width() * 0.45)
rectangle_x = canvas.winfo_width() - rectangle_width
headblock = canvas.create_text(
rectangle_x+10, 10,
anchor='nw',
text=headline,
font=('Helvetica', 18, 'bold'),
fill='black',
width=rectangle_width - 20
)
x1, y1, x2, y2 = canvas.bbox(headblock)
textblock = canvas.create_text(
rectangle_x+10, y2+10,
anchor='nw',
text=fulltext,
font=('Helvetica', 14, 'normal'),
fill='black',
width=rectangle_width - 20
)
canvas.update()
现在我想让长文本像提词器一样缓慢向上移动,以便观众能够阅读全文。这可以通过 canvas.move() 实现。
def animate():
canvas.move(textblock, 0, -1)
x1, y1, x2, y2 = canvas.bbox(textblock)
if y2 > canvas.winfo_height():
window.after(60, animate)
但是当文本块向上移动时,它会显示在标题后面。问题出在背景图像上。它应该始终可见。如果我将标题和文本放在不同的对象(标签、画布等)中,它们就不再透明了。
有谁有一个好主意,如何只移动长文本,而图像始终可见并且标题保持静态?