目标:使“tomato.png”(左侧图像)成为右侧窗口的背景。
当我运行代码时,窗口甚至不会出现,我会收到以下消息:
_tkinter.TclError:无法识别图像文件“tomato.png”中的数据
在之前使用 tkinter 的工作中,我使用了 tkk。为了让我正在使用的按钮上显示文字,我在这里尝试了无济于事(这个方法是我的火力全开。我从12月31日才开始学习Python - 有很多我不知道。)
我用谷歌搜索了我的问题,并对 Pil/Pillow 有了粗略的了解...所以我通过 Pycharm 安装了 Pillow。
取得了一些进展。通过 Pycharm 安装 Pillow 后,窗口实际上出现了,错误消息没有出现,但是......图像没有生成。
另外,这是我正在使用的python的路径:/Users/my_name/.pyenv/versions/3.10.0/bin/python
我将感谢您提供并记住的所有帮助...我刚刚接触Python两周,具有金融背景-我根本不同意编程用语...。即使在研究这个问题时,也有人建议通过命令行安装 pip,坦率地说,我不知道发生了什么。
另外,这是我的第一篇文章,所以如果我没有遵循这篇文章中的 SOP,请不要钉死我。你们有些人回答问题的时候很无情。
非常感谢您的宝贵时间。
但是我在这里手动输入的:
from tkinter import
from tkinter import ttk
from PIL import Image
from PIL import ImageTk
# ---------------------------- CONSTANTS ------------------------------- #
PINK = "#e2979c"
RED = "#e7305b"
GREEN = "#9bdeac"
YELLOW = "#f7f5dd"
FONT_NAME = "Courier"
WORK_MIN = 25
SHORT_BREAK_MIN = 5
LONG_BREAK_MIN = 20
# ---------------------------- TIMER RESET ------------------------------- #
# ---------------------------- TIMER MECHANISM ------------------------------- #
# ---------------------------- COUNTDOWN MECHANISM ------------------------------- #
# ---------------------------- UI SETUP ------------------------------- #
window = Tk()
window.title("Pomodoro")
canvas = Canvas(width=200, height=224)
tomato_pic = Image.PhotoImage(file="tomato.png")
canvas.create_image(100, 112, image=tomato_pic)
canvas.pack()
window.mainloop()
我在这里找到了替代方案:
https://stackoverflow.com/a/46624625/8146119
import Tkinter as tk
from PIL import ImageTk, Image
window = tk.Tk()
window.title("tkinter stuff")
window.geometry("300x300")
window.configure(background='grey')
path = "hs.gif"
img = ImageTk.PhotoImage(Image.open(path))
panel = tk.Label(window, image = img)
panel.pack(side = "bottom", fill = "both", expand = "yes")
window.mainloop()
我必须找出是什么使该代码有效以及是什么使我的代码失败。 ## 更新 ## 问题是我没有使用合适的 tkinter,当我应该使用 8.6 时我却使用了 8.5。我还使用 python 3.10,并且根据我在网上的粗略搜索,tkinter 不适用于 3.9。我用的是3.8。我遇到的问题不再是了。 希望有人能从中受益。我很感谢大家的时间。
我发现这篇文章是因为我遇到了同样的问题。我是 python 两个月的初学者。我已将照片格式更改为 jpeg,现在效果很好,但它失去了透明背景...... 我在与前一个类似的代码中使用了它:
from tkinter import *
from PIL import ImageTk
window = Tk()
window.title("Pomodoro")
canvas = Canvas(width=200, height=224)
tomato_pic = Image.PhotoImage(file="tomato.jpeg")# notice .jpeg instead of .png format
canvas.create_image(100, 112, image=tomato_pic)
canvas.pack()
window.mainloop()
我希望它有帮助。 我尝试过不同的 .png 文件,有时有效,有时无效...... 我真的很高兴找到这个网站,非常感谢大家!
首先,使用较新版本的 Python 可能会更好。各种 stackoverflow 海报都指出了 tkinter 支持图像的问题。请参阅帖子这里
根据 this stackoverflow 的回答,
tkinter.Label
和 Label.place
是在 tkinter 窗口中放置背景图像的便捷技巧。以下是这如何适合您的代码。它适用于使用 Python 3.8 和 Windows 10 的我。
from tkinter import *
from PIL import Image
from PIL import ImageTk
# ---------------------------- CONSTANTS ------------------------------- #
PINK = "#e2979c"
RED = "#e7305b"
GREEN = "#9bdeac"
YELLOW = "#f7f5dd"
FONT_NAME = "Courier"
WORK_MIN = 25
SHORT_BREAK_MIN = 5
LONG_BREAK_MIN = 20
# ---------------------------- TIMER RESET ------------------------------- #
# ---------------------------- TIMER MECHANISM ------------------------------- #
# ---------------------------- COUNTDOWN MECHANISM ------------------------------- #
# ---------------------------- UI SETUP ------------------------------- #
window = Tk()
window.title("Pomodoro")
canvas = Canvas(width=200, height=224)
tomato_pic = PhotoImage(file="tomato.png")
# note here use of Label
background_label = Label(window, image=tomato_pic)
# label.place is tk trick that is good for backgrounds
background_label.place(x=0, y=0, relwidth=1, relheight=1)
canvas.pack()
window.mainloop()
然后您可能需要使用 relwidth、relheight 参数,并可能缩小原始图像的大小,以使其正确适合。
如果您使用 PyCharm,请确保将您的 python 解释器更改为最新安装的版本。 3.9及更低版本可能有这个问题。更新到3.11,问题应该得到解决