Python 尝试在TKinter中加载图像,但在应该的位置获得空白,有什么想法吗?
我在底部只看到一张照片,但在一个垂直的塔里应该有10张照片,知道吗?还想知道tkinter scrollbar命令是否可以在其中包含图像,如果没有,是否还有其他方法可以为标签提供滚动条Python 尝试在TKinter中加载图像,但在应该的位置获得空白,有什么想法吗?,python,image,tkinter,scrollbar,python-imaging-library,Python,Image,Tkinter,Scrollbar,Python Imaging Library,我在底部只看到一张照片,但在一个垂直的塔里应该有10张照片,知道吗?还想知道tkinter scrollbar命令是否可以在其中包含图像,如果没有,是否还有其他方法可以为标签提供滚动条 def show_data(self): print('------------------------------------------------------------------------') print('data OK') for i in range(10):
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)
为了防止标签中使用的图像被破坏,您需要保留对图像的引用:
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')))
#创建画布并将其作为窗口的左侧
canvas=canvas(self.master,宽度=200,高度=600)#假设self.master是Tk()
canvas.pack(side='left')
#创建一个垂直滚动条并将其放置在窗口的右侧
scrollbar=scrollbar(self.master,orient='vertical',command=canvas.yview)
滚动条.pack(side='right',fill='y')
#配置滚动条以垂直方向滚动画布
configure(yscrollcommand=scrollbar.set)
#将框架创建为画布的子对象以保存标签
self.frame=frame(画布)
canvas.create_window((0,0),window=self.frame,anchor='nw')
#如果调整了帧的大小,请确保更新滚动区域
self.frame.bind(“”,lambda e:canvas.configure(scrollregion=canvas.bbox('all'))
猜测代码在函数中,因此使用局部变量photo
保存图像,一旦函数退出,图像将被销毁。尝试改用一个实例变量。是的,谢谢你完全成功了,你还知道我是否可以在tkinter中添加一个滚动条,但是在scollbarals中有图像吗?当我把image=image.open(self.data[0][7]+'.jpg')photo=ImageTk.PhotoImage(image)放进去时,我是否遗漏了什么在for循环中,它以一种真正有线的方式显示图像,在底部只有一个ant,而在侧边只有10个,这是因为您只使用了一个实例变量,该变量在for循环中重复初始化。与在代码中一样,在for循环中使用相同的图像,可以将图像初始化代码移到for循环之外。但是,如果我想更改实际图像并用[i]替换[0],该怎么办否则我会得到10张相同的图片,如果我仍然想要左边的滚动条,但我使用的是grid not pack呢?还要感谢图像解决方案真的伤害了我的头,你可以将画布和滚动条放在一个框架中,然后你可以使用grid来定位框架。要将滚动条放在左侧,只需更改滚动条和画布的侧面选项。