我正在尝试在Tkinter画布中显示图像以及一些文本,并且遇到以下错误。另外,在anaconda中使用Spyder(最新的Spyder)运行时,我的mac机不显示按钮的背景色。
我的python代码是:
from tkinter import *
from PIL import ImageTk,Image
def plot_best_batsmen():
best_batsmen = dataset.loc[dataset.loc[dataset['Innings']>=15,'Average'].idxmax(),'Names']
message = ("The best Batsman of the Tournament could possibly be: ", best_batsmen)
canvas_width = 500
canvas_height = 500
root = Tk()
root.geometry("600x600")
root.title("New Window")
canvas = Canvas(root, width=canvas_width, height=canvas_height)
canvas.create_text(1, 10, anchor=W, text=message)
img = ImageTk.PhotoImage(Image.open("prediction.jpg"))
canvas.create_image(20, 20, anchor=NW, image=img)
canvas.image = img
canvas.pack()
root.mainloop()
运行时显示如下错误消息:
Exception in Tkinter callback
Traceback (most recent call last):
File "/anaconda3/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
return self.func(*args)
File "/Users/vivekchowdary/Documents/PS3_Final_Project/Batsmen.py", line 110, in plot_best_batsmen
canvas.create_image(20, 20, anchor=NW, image=img)
File "/anaconda3/lib/python3.7/tkinter/__init__.py", line 2489, in create_image
return self._create('image', args, kw)
File "/anaconda3/lib/python3.7/tkinter/__init__.py", line 2480, in _create
*(args + self._options(cnf, kw))))
_tkinter.TclError: image "pyimage3" doesn't exist
按钮代码如下:
b1 = Button(root, text="Elbow Method", command=plot_elbow, bg="green", fg="white").pack(side = LEFT)
b2 = Button(root, text="K-Means Clustering", command=plot_kmeans, bg="blue", fg="white").pack(side = LEFT)
b3 = Button(root, text="Batsmen who scored 4 or more Hundreds", command=plot_hundreds, bg="#D35400", fg="white").pack(side = LEFT)
b4 = Button(root, text="Runs Scored by Various Players", command=plot_runs, bg="#117A65", fg="white").pack(side = LEFT)
b5 = Button(root, text="Best Batsmen", command=plot_best_batsmen, bg="#34495E", fg="white").pack(side = LEFT)
b6 = Button(root, text="Stop", command=root.destroy, bg="red", fg="white").pack(side = BOTTOM)
我希望Tkinter显示以下图像。但是它正在报告一个错误。谁能帮我解决这个错误?
答案 0 :(得分:2)
tkinter也有一个称为Image的类/函数。您还从PIL导入了图像。您需要确定要使用的Image.open。 tkinter.Image没有'open'属性。
答案 1 :(得分:0)
似乎该错误与您的tkinter无关。要确定问题所在,请
from PIL import Image
print(Image.open)
如果正确安装了所有内容,结果应类似于以下内容。
< function open at 0x0000000008A26488 >
答案 2 :(得分:0)
我自己想出了答案,只是想分享它来帮助有同样疑问的人。
我们需要在Tkinter之后导入PIL,因为Tkinter也有自己的类Image,该类不具有“打开”功能,并且如果在PIL之后导入,则来自Tkinter的Image会替换来自PIL的Image。
,第二件事是将root = Tk()
替换为root = Toplevel()
,因为问题是当Python / Tkinter试图从按钮创建画布时,它实际上是在试图创建两个窗口在根下倒下。
现在,代码将照片导入到GUI中并且可以正常工作。
所以,下面的代码终于可以正常工作了:
def plot_best_batsmen():
best_batsmen = dataset.loc[dataset.loc[dataset['Innings']>=15,'Average'].idxmax(),'Names']
message = ("The best Batsman of the Tournament could possibly be: ",best_batsmen)
canvas_width = 400
canvas_height = 500
root = Toplevel()
root.geometry("700x600")
root.title("New Window")
canvas = Canvas(root, width=canvas_width, height=canvas_height)
canvas.create_text(1, 10, anchor=W, text=message)
img = ImageTk.PhotoImage(Image.open("virat.jpg"))
canvas.create_image(150, 20, anchor=NW, image=img)
canvas.image = img
canvas.pack()
root.mainloop()