Tenho uma janela em tela cheia com uma tela em tela cheia. Primeiro, coloco uma imagem de fundo em tela cheia nessa tela.
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()
Em seguida, coloco um texto de título no canto superior direito e, abaixo dele, um texto mais longo. O texto é muito mais longo do que a altura da tela.
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()
Agora, quero animar o texto longo, como um telepromter, movendo-o lentamente para cima, para que os espectadores possam ler o texto completo. Isso funciona bem com 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)
Mas enquanto o bloco de texto sobe, ele é exibido atrás do título. O problema é a imagem de fundo. Ela deveria estar sempre visível. Se eu colocar o título e o texto em objetos diferentes, rótulos, telas, etc., eles não ficam mais transparentes.
Alguém tem uma boa ideia de como mover apenas o texto longo, enquanto a imagem está sempre visível e o título permanece estático?
Você pode usar outro
Canvas
widget como telepromter com uma imagem recortada da imagem de fundo que a faz parecer transparente e, em seguida, rolar o texto dentro dela:Resultado: