如何将图像(使用
palplot
创建的 seaborn
)设置到 Customtkinter 按钮 (CTkButton
) 中?
在下面的 MWE 中,我创建了按钮和图像,但在按钮定义中使用
image = image
添加图像不起作用。
MWE
root = CTk()
# Create figure
image = plt.Figure()
ax = image.add_subplot()
# Create canvas to hold figure
canvas = FigureCanvasTkAgg(image, master=root)
canvas.get_tk_widget().grid(column=0, row=1)
ax.imshow(np.arange(500).reshape(1, 500),
cmap=matplotlib.colors.ListedColormap(list(color_palette("flare", 500))),
aspect="auto")
canvas.draw_idle()
# Create button
button = CTkButton(root, text="some button with an image", image = image)
button.grid(column=0, row=0)
root.mainloop()
提供给CTkButton的图像必须是tk.Photoimage。
所以我能想到的完成这项工作的唯一方法是将绘图临时存储到文件中:
import tempfile
from tkinter import PhotoImage
from customtkinter import CTk, CTkButton
from matplotlib import pyplot as plt
plt.imshow([[1,0],[0,1]])
# Save the plot to a temporary file
tmp_path = tempfile.NamedTemporaryFile(delete=False, suffix=".png").name
plt.savefig(tmp_path)
plt.close()
root = CTk()
# Implement temporary file as a PhotoImage for CTkButton
plot_img = PhotoImage(file=tmp_path, master=root)
button = CTkButton(root, text="some button with an image", image=plot_img)
button.grid(column=0, row=0)
root.mainloop()