当前位置:优草派 > 问答 > Python问答

python tkinter如何插入显示图片?

标签: Python  Python开发  Python  作者: ps1593901

回答:

Python Tkinter是Python语言的标准GUI库,提供了创建GUI应用程序所需的所有组件和功能。在使用Tkinter创建应用程序时,经常需要在窗口中插入和显示图片,比如显示应用程序的Logo、用户头像、产品图片等。本文将从多个角度来分析Python Tkinter如何插入和显示图片。

1. 导入图片

在使用Tkinter插入图片之前,需要先导入图片。Python Tkinter支持多种图片格式,包括PNG、JPEG、BMP、GIF等。要导入图片,可以使用Python内置的PIL库(Python Image Library)或者第三方库pillow。下面是使用pillow导入图片的代码:

```python

from PIL import Image, ImageTk

image = Image.open("image.png")

photo = ImageTk.PhotoImage(image)

```

上面的代码中,首先使用PIL库中的Image.open方法打开图片文件,然后使用ImageTk.PhotoImage方法将图片转换为Tkinter组件可用的PhotoImage对象。

2. 在窗口中显示图片

导入图片后,就可以在Tkinter窗口中显示图片了。要在窗口中显示图片,可以使用Tkinter中的Label组件。下面是在窗口中显示图片的代码:

```python

from tkinter import *

root = Tk()

image = Image.open("image.png")

photo = ImageTk.PhotoImage(image)

label = Label(root, image=photo)

label.pack()

root.mainloop()

```

上面的代码中,首先创建了一个Tkinter窗口,并使用之前导入的图片创建了一个PhotoImage对象。然后创建了一个Label组件,并将PhotoImage对象设置为该组件的image属性。最后使用pack()方法将Label组件添加到窗口中。

3. 改变图片大小

有时候需要在窗口中显示的图片大小与原始图片大小不一致。在Tkinter中,可以使用PIL库中的Image.resize方法改变图片大小。下面是改变图片大小的代码:

```python

from tkinter import *

from PIL import Image, ImageTk

root = Tk()

image = Image.open("image.png")

image = image.resize((200, 200))

photo = ImageTk.PhotoImage(image)

label = Label(root, image=photo)

label.pack()

root.mainloop()

```

上面的代码中,首先使用PIL库中的Image.resize方法将图片大小改变为200x200。然后使用之前介绍的方法创建PhotoImage对象,并将其设置为Label组件的image属性。最后使用pack()方法将Label组件添加到窗口中。

4. 显示动态图片

在Tkinter中,还可以显示动态图片,比如GIF动画。要显示动态图片,需要使用PIL库中的ImageSequence和ImageTkSequence方法。下面是显示动态图片的代码:

```python

from tkinter import *

from PIL import Image, ImageTk, ImageSequence

root = Tk()

image = Image.open("animation.gif")

frames = [ImageTk.PhotoImage(img)

for img in ImageSequence.Iterator(image)]

label = Label(root)

label.pack()

def update(frame):

frame = frames[frame]

label.configure(image=frame)

root.after(100, update, (frame+1)%len(frames))

root.after(0, update, 0)

root.mainloop()

```

上面的代码中,首先使用PIL库中的Image.open方法打开GIF动画文件,并使用ImageSequence.Iterator方法将其转换为图片序列。然后创建了一个Label组件,并将其添加到窗口中。接着定义了一个update函数,用于更新动态图片。在update函数中,首先获取当前帧的图片,然后使用configure方法将其设置为Label组件的image属性。最后使用root.after方法定时更新动态图片。

TOP 10
  • 周排行
  • 月排行