【问题标题】:TKinter python 3.x resizing an imageTKinter python 3.x 调整图像大小
【发布时间】:2018-01-19 09:33:44
【问题描述】:

我想使用 TKinter 调整图像大小。 请注意,我不会为此使用 PIL。

我目前如何才能拥有这张效果很好的图片。

logo = PhotoImage(file="logo_dribbble-01_1x.PNG")
label = Label(f1,image=logo, borderwidth=0, highlightthickness=0)
label.pack()

我想调整此图片的大小,使徽标看起来更小。

我试过这样做,这是建议here

smallLogo = PhotoImage(file="logo_dribbble-01_1x.PNG")
smallLogo = smallLogo.subsample(2, 2)
smallLabel = Label(f1,image=smallLogo, borderwidth=0, highlightthickness=0)
smallLabel.pack()

但这会创建一个空标签而不显示图像。

我尝试使用 Photoshop 调整图像大小并使用该图像,然后使用该 .png 图像显示较小的图像,如下所示:

logo = PhotoImage(file="logo_dribbble-01_1xsmall.PNG")
smallLabel = Label(f1,image=smallLogo, borderwidth=0, highlightthickness=0)
smallLabel.pack()

但是,当我尝试运行代码时出现此错误 _tkinter.TclError: encountered an unsupported criticial chunk type "mkBF"

我该如何解决这个问题?

【问题讨论】:

  • 总是将完整的错误消息(Traceback)放在有问题的地方(作为文本,而不是屏幕截图)。还有其他有用的信息。
  • 顺便说一句:tkinter 不支持 PNG。要显示 PNG,您必须使用 Image, ImageTk from PIL/pillow
  • 在某些平台上,Python 不支持 tk v8.6,因此它不是一个可移植的解决方案。例如,在 macOS 中,我们只能使用 tk v8.5,它不支持 PNG。我们需要将图像转换为 GIF,或者使用外部库,例如 Pillow。
  • @Nae 可能在最新的 TCL/TKtkinter 中有所改变,但旧版本不适用于 PNG,您在页面 PhotoImage 上有信息。或者目前 tkinter 在后台使用 PIL/pillow。
  • @Nae - 我找到了 Tk 8.6 的信息:Built-in PNG Image Support

标签: python image python-3.x tkinter photoimage


【解决方案1】:

以下代码对我有用:

from tkinter import *

f1 = Tk()
smallLogo = PhotoImage(file="image.PNG")
smallLogo = smallLogo.subsample(2, 2)
smallLabel = Label(f1,image=smallLogo, borderwidth=0, highlightthickness=0)
smallLabel.pack()
f1.mainloop()

注意我在 tk-8.6

【讨论】:

  • 在某些平台上,Python 不支持 tk v8.6,因此它不是一个可移植的解决方案。例如在 macOS 中,我们只能使用 tk v8.5,它不支持 PNG。我们需要将图像转换为 GIF,或者使用外部库,例如 Pillow。
【解决方案2】:
smallLogo = PhotoImage(file="logo_dribbble-01_1x.PNG")
smallLogo_one = smallLogo.subsample(2, 2)
smallLabel = Label(f1,image=smallLogo_one, borderwidth=0, highlightthickness=0)
smallLabel.pack()

我认为这将为您解决问题。PhotoImage 的变量与 Subsample 的变量相同,可以为您修剪图像。 我将 subsample 的变量更改为 smallLogo_one 并将其解析为 Lable 中的图像属性。

【讨论】:

    【解决方案3】:

    我必须保留标签正在使用的图像的引用,如下所示:

    logo = PhotoImage(file="image.png")
    logo = logo.subsample(2, 2)
    label = Label(root,image=logo, borderwidth=0, highlightthickness=0)
    label.image = logo
    label.pack()
    

    【讨论】:

      猜你喜欢
      • 2021-04-21
      • 2015-04-12
      • 2021-08-24
      • 2023-02-11
      • 2016-08-25
      • 2016-01-25
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多