Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试在TKinter中加载图像,但在应该的位置获得空白,有什么想法吗?_Python_Image_Tkinter_Scrollbar_Python Imaging Library - Fatal编程技术网

Python 尝试在TKinter中加载图像,但在应该的位置获得空白,有什么想法吗?

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):

我在底部只看到一张照片,但在一个垂直的塔里应该有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)

为了防止标签中使用的图像被破坏,您需要保留对图像的引用:

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来定位框架。要将滚动条放在左侧,只需更改滚动条和画布的侧面选项。