пытаясь загрузить изображение в TKinter, но получить пробел, где должны быть какие-либо идеи? - PullRequest
0 голосов
/ 17 марта 2019

У меня только одна картинка внизу, но в вертикальной башне их должно быть 10, понимаешь?также было интересно, может ли команда tkinter scrollbar иметь изображения внутри нее, если нет, то есть ли другой способ иметь полосу прокрутки для меток?

def show_data(self):
    print('------------------------------------------------------------------------')
    print('data OK')
    for i in range(10):
        self.image = Image.open(self.data[i][7] + '.jpg')
        self.photo = ImageTk.PhotoImage(self.image)
        #result0 = Label(self.frame, text=self.data[i][0])
        #result0.grid(row=i+3, column=1, sticky=W)
        #result1 = Label(self.frame, text=self.data[i][1])
        #result1.grid(row=i+3, column=2, sticky=W)
        #result2 = Label(self.frame, text=self.data[i][2])
        #result2.grid(row=i+3, column=3, sticky=W)
        #result3 = Label(self.frame, text=self.data[i][3])
        #result3.grid(row=i+3, column=4, sticky=W)
        #result4 = Label(self.frame, text=self.data[i][4])
        #result4.grid(row=i+3, column=5, sticky=W)
        #result5 = Label(self.frame, text=self.data[i][5])
        #result5.grid(row=i+3, column=6, sticky=W)
        #result6 = Label(self.frame, text=self.data[i][6])
        #result6.grid(row=i+3, column=7, sticky=W)
        result7 = Label(self.frame, image=self.photo)
        result7.grid(row=i + 3, column=8, sticky=W)

1 Ответ

0 голосов
/ 18 марта 2019

Чтобы изображение, использованное в метке, не было уничтожено, необходимо сохранить ссылку на изображение:

def show_data(self):
    print('------------------------------------------------------------------------')
    print('data OK')
    for i in range(10):
        photo = ImageTk.PhotoImage(file=self.data[i][7]+'.jpg')
        result7 = Label(self.frame, image=photo)
        result7.image = photo # keep a reference of the image
        result7.grid(row=i + 3, column=8, sticky=W)

Чтобы иметь полосу прокрутки для меток внутри рамки, самый распространенный способпоместить рамку внутри холста, а затем создать полосу прокрутки для прокрутки области просмотра холста:

# create a canvas and put it as the left side of window
canvas = Canvas(self.master, width=200, height=600) # assume self.master is Tk()
canvas.pack(side='left')
# create an vertical scrollbar and put it at the right side of window
scrollbar = Scrollbar(self.master, orient='vertical', command=canvas.yview)
scrollbar.pack(side='right', fill='y')
# configure the scrollbar to scroll the canvas in vertical direction
canvas.configure(yscrollcommand=scrollbar.set)
# create the frame as child of canvas to hold the labels
self.frame = Frame(canvas)
canvas.create_window((0,0), window=self.frame, anchor='nw')
# make sure to update the scrolling region if the frame is resized
self.frame.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox('all')))
...