在Tkinter中添加图像

3 投票
2 回答
9518 浏览
提问于 2025-04-17 18:54

我在我的tkinter代码中添加了一张图片,但这张图片几乎填满了整个框架。如果可以的话,你能推荐一个教程,教我怎么处理这个问题吗?或者你能在这里给我演示一下吗?

我没有添加完整的代码,但下面的代码应该能在你把图片保存到Python目录后显示一张测试图片。

我想创建一个“下一步”按钮,点击后能打开一个新框架,里面显示另一张图片。

from Tkinter import *

root = Tk()
ButtonImage = PhotoImage(file='test.gif')
testButton = Button(root, image=ButtonImage)
testButton.pack()
root.mainloop()

2 个回答

0

有很多模块可以帮你解决这个问题。你可以使用PIL模块。通常在像你这样的情况下,我会用PIL模块来加载图片,然后把它粘贴到框架上。下面就是具体的做法。

from Tkinter import *
from PIL import Image, ImageTk
root = Tk()
Image       = Image.open(path).resize((300, 300)), Image.ANTIALIAS
ButtonImage = ImageTk.PhotoImage(Image)
# If you are using image by itself. Without it being a button. 
#Image_Label = Label(image = self.HomeImage, borderwidth=0, highlightthickness=0)
# Otherwise 
testButton = Button(root, image=ButtonImage)
testButton.pack()
root.mainloop()

我相信这肯定能帮助你调整图片大小,并把图片加载到屏幕上作为按钮。我们用PIL把图片加载到框架上,并调整了图片的大小。这也是你之前提到的需求。我在Image.open()函数上使用了resize方法。这个方法可以把图片调整到你想要的大小。标准的尺寸就是那张图片的实际大小。

0

你可以试试这样的做法:

from Tkinter import *
from glob import glob

class ImageFrame(Frame):

    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.images = glob("*.gif")
        self.cur = 0
        # label showing the image
        self.image = PhotoImage()
        imagelabel = Label(self, image=self.image)
        imagelabel.grid(row=1, column=1)
        # button cycling through the images
        button = Button(self, text="NEXT", command=self.show_next)
        button.grid(row=2, column=1)
        # layout and show first image
        self.grid()
        self.show_next()

    def show_next(self):
        self.cur = (self.cur + 1) % len(self.images)
        self.image.configure(file=self.images[self.cur])

ImageFrame().mainloop()

下面是一些解释:

  • glob 是用来获取当前目录中所有符合某种模式的文件列表的工具。
  • grid 是 Tkinter 中一个简单但非常灵活的布局管理器(你可以查看 Tkinter 参考)。
  • show_next 方法是和按钮绑定在一起的,它可以循环显示图片,并通过 configure 方法将新图片绑定到 PhotoImage 上。

最终的效果是一个简单的框架,里面显示一张大图片和一个按钮,可以在当前目录中的 gif 图片之间切换。

撰写回答