Python tkinter 图片随Scrollbar滚动
时间: 2023-11-19 22:07:49 浏览: 176
在 Python 中使用 Tkinter 的文本文件读取器程序和源代码
以下是一个简单的示例代码,可以实现在Tkinter窗口中使用Scrollbar滚动显示图片:
```python
from tkinter import *
from PIL import Image, ImageTk
class ScrollableImage(Frame):
def __init__(self, master=None, **kw):
self.image = kw.pop('image', None)
self.width = kw.pop('width', None)
self.height = kw.pop('height', None)
self.bg_color = kw.pop('bg_color', None)
super().__init__(master, **kw)
self.canvas = Canvas(self, highlightthickness=0, bg=self.bg_color)
self.canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
self.scrollbar = Scrollbar(self, orient=VERTICAL, command=self.canvas.yview)
self.scrollbar.pack(side=RIGHT, fill=Y)
self.canvas.config(yscrollcommand=self.scrollbar.set)
self.canvas.bind('<Configure>', self.__on_canvas_configure)
self.container = Frame(self.canvas, bg=self.bg_color)
self.canvas.create_window((0, 0), window=self.container, anchor=NW)
self.container.bind('<Configure>', self.__on_container_configure)
if self.image:
self.set_image(self.image)
def set_image(self, image):
self.image = Image.open(image)
self.photo = ImageTk.PhotoImage(self.image.resize((self.width, self.height), Image.ANTIALIAS))
self.canvas.config(scrollregion=self.canvas.bbox(ALL))
self.image_canvas = self.container.create_image(0, 0, anchor=NW, image=self.photo)
def __on_canvas_configure(self, event):
self.canvas.itemconfigure(self.image_canvas, width=event.width)
def __on_container_configure(self, event):
self.canvas.config(scrollregion=self.canvas.bbox(ALL))
if __name__ == '__main__':
root = Tk()
image_path = 'your_image_path.jpg'
image_width = 800
image_height = 600
frame = Frame(root)
frame.pack(side=TOP, fill=BOTH, expand=TRUE)
scrollable_image = ScrollableImage(frame, width=image_width, height=image_height, bg_color='white')
scrollable_image.pack(side=LEFT, fill=BOTH, expand=TRUE)
scrollable_image.set_image(image_path)
root.mainloop()
```
在上面的示例中,我们使用了Pillow库中的ImageTk类来将图片转换为Tkinter中的PhotoImage格式,然后使用Canvas和Scrollbar来实现滚动显示图片的功能。在ScrollableImage类中,我们使用了Canvas的yscrollcommand属性来绑定Scrollbar的滚动事件,然后使用Canvas的create_window方法将一个Frame作为Canvas的子控件添加到Canvas中。在该Frame上添加图片,并绑定Canvas和该Frame的resize事件,以便在窗口大小发生变化时更新滚动范围。最后,在主函数中创建一个ScrollableImage实例并设置图片路径、宽度和高度等参数。
阅读全文