scroll canvas.create_text
У меня есть главный Canvas с изображение. Мне нужно добавить виджет с прокруткой, для добавления в него текст, но ScrolledText мне не подходит так как мне нужно сделать фон задний, под текстом, полупрозрачный, чтобы проглядывалась картинка на canvas. Поэтому я заготовил полу прозрачный fon.png. Я понимаю что без canvas это не решить. Но проблема в том, что при создании виджета типа (Canvas, Frame, и т.д. для добавлния в них scroll функции) у них изначально есть задний фон и полупрозрачным его никак не сделать, если накладывать сверху после картинку, то видно же будет это стандартный фон под изображением.
Как решить эту делему? Мне нужен виджет, с полупрозрачным фоном, и чтобы я могу туда добавлять текст и у него была функция прокрутки.
код чисто с главным изображением, как дальше не знаю.
from tkinter import *
from PIL import ImageTk, Image
class game(Frame):
def __init__(self, master):
super().__init__(master)
self.canvas = Canvas(root, width=800, height=600)
self.canvas.pack(fill="both", expand=True)
self.background = Image.open('image.jpg'))
self.img1 = ImageTk.PhotoImage(self.background)
self.image1 = self.canvas.create_image(0, 0, anchor=NW, image=self.img1)
if __name__ == "__main__":
root = Tk()
app = test(root)
root.mainloop()
Ответы (1 шт):
я решил все так. добавив сам текст реакцию на прокрутку мыши. А самое главное весь текст добавлял в список
txtInfo = []
txtInfo.append('text1')
txtInfo.append('text2')
self.canvastext = self.canvas.create_text(self.width-302, 10, anchor=NW, text=self.scrollText(txtInfo), width=302, fill='white')
self.canvas.tag_bind(self.canvastext, '<Button-4>', lambda event: self.scrolling('+'))
self.canvas.tag_bind(self.canvastext, '<Button-5>', lambda event: self.scrolling('-'))
далее добавил функции для обработки списка и движения колесика
def scrollText(self,txt=[]):
lst = []
# колич. записей
if len(txt)>50:
col = len(txt) - 50
for cc in range(0, col):
txt.remove(txt[col-cc])
# отображение
if len(txt)>15:
self.ii = len(txt)-14
self.jj = self.ii+14
for rr in range(self.ii, self.jj):
lst.append(txt[rr])
else:
lst = txt
return ''.join(lst)
def scrolling(self,updown):
lst = []
if updown == '+':
if self.ii-1 > -1:
self.ii = self.ii-1
self.jj = self.ii+14
for rr in range(self.ii, self.jj):
lst.append(txtInfo[rr])
self.canvas.itemconfigure(self.canvastext, text=''.join(lst))
else:
if self.ii+15 < len(txtInfo)+1:
self.ii = self.ii + 1
self.jj = self.ii + 14
for rr in range(self.ii, self.jj):
lst.append(txtInfo[rr])
self.canvas.itemconfigure(self.canvastext, text=''.join(lst))
возможно грубо, но главное работает