【问题标题】:How to add a partially transparent image to Tkinter?如何向 Tkinter 添加部分透明的图像?
【发布时间】:2014-09-28 01:24:48
【问题描述】:

我正在使用 Tkinter 制作游戏,出于显而易见的原因,我真的很想在游戏中使用部分透明的图像...

我该怎么做? PNG 不允许透明度,而 JPEG 确实允许透明度,但不被视为“图像文件”......什么文件类型允许这样做?我可以以某种方式使用位图来使 JPEG 可用吗?谢谢!

一些使用信息:

我在 3 个月前开始学习 Python,但我的水平并不高,但我确实知道类、函数以及如何在 Tkinter 中制作东西。我显然也知道更多,但正如我所说,我并不是非常擅长。谢谢!

【问题讨论】:

  • 添加了最小的代码示例:)。告诉我它是否不起作用。

标签: python image tkinter


【解决方案1】:

Tkinter 确实可以识别 .ico 文件,但除了左上角的图标之外,我从未使用过它们。

我会使用 GIF 文件,并使用 tk.PhotoImage 来显示它。这确实允许显示透明图像:

我的证明:

tk 窗口中的图像,但是当我将背景颜色更改为黄色时,按钮背景与 tk 窗口背景相同,因此是透明的。

编辑:这里是代码

import tkinter as tk
root = tk.Tk()
image1 = tk.PhotoImage(file = "FILENAME.gif")
label1 = tk.Button(image = image1)
label1.pack()
root.mainloop()

希望对你有所帮助。

【讨论】:

  • 其实对我没用,会不会是我的图片编辑软件?我试过使用 Gimp 2 和 paint.net,每次都导出为 .gif。
  • Hunter Kepley,如果方便的话,我可以展示一下代码吗?
  • 没问题,继续。
  • 可能是我没用pack,pack是干什么用的?你用什么图片编辑器?
  • @hunter .pack() 是一种将小部件放入窗口的方法,其他是.place().grid()。至于图片编辑软件,这张图是网上找的,用Adobe Photoshop,然后在线转成GIF。
【解决方案2】:
from tkinter import *

root = Tk()

startpic = PhotoImage(file = "ddsp.gif")
startbut = PhotoImage(file = "start.gif")
helpbut = PhotoImage(file = "help.gif")
exitbut = PhotoImage(file = "exit.gif")

root.geometry("640x480")
root.title("Deep Death")
root.resizable(0,0)

starter = Label(image = startpic)
starter.pack()

start = Label(image = startbut)
start.place(x=340,y=80)

root.mainloop()

尽管 .gif 文件是透明的,但它们以白色背景显示。

【讨论】:

  • 作为一般原则,一旦将小部件组合在一起,您应避免在 Tkinter GUI 中使用一组可用的<GeometryLayoutMANAGER> 中的多个<GeometryLayoutMANAGER>
  • @user3666197:这是一个糟糕的一般原则。事实上,我什至会说一般规则是始终使用多个。他们每个人都有长处和短处。唯一需要注意的是,您不能将两个不同的管理器与共享相同 parent.m 的小部件一起使用
  • 我只使用多个用于背景图像之类的东西,canvas 适合这些。但是为什么使用画布我可以输入部分透明的图像,但使用包网格或放置它们不透明?我需要知道,因为按钮不在画布中,我需要使按钮部分透明。救命!
  • @BryanOakley 喜欢纯文本的口音。 starter.pack()start.place() 确实共享相同的公共 root-parent,这难道不是您坚持要避免作为警告的情况吗?
  • @W1ll1amvl 是的,这正是问题所在。我的解决方案是从它所在的位置获取背景颜色,裁剪并将其粘贴到另一个窗口中并以这种方式制作。稍后我可能会切换到 pygame 或 pygtk+,但现在这可行。感谢您的尝试! :)
猜你喜欢
  • 2016-08-12
  • 2012-02-24
  • 2016-02-27
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多