python - tkinter 画布无法显示图像
问题描述
所以我正在做一个项目,我决定使用 tkinter 制作一个多页 GUI,我需要它来显示二维数组中的图像,但它总是空的,那我该怎么办?我有一个加载按钮来从输入框中获取文件路径并使用其他功能来获取数据,这部分很好,但我按照在线教程使用'ImageTk.PhotoImage(image)'来加载图像数据但是它在画布中不可见。
非常感谢。
import os
from tkinter import *
from tkinter import filedialog
from PIL import Image, ImageTk
def show_frame(frame):
frame.tkraise()
window = Tk()
window.geometry("1680x997")
window.rowconfigure(0, weight=1)
window.columnconfigure(0, weight=1)
StartPage = Frame(window)
Page1 = Frame(window)
for frame in (StartPage, Page1):
frame.grid(row=0, column=0, sticky='nsew')
show_frame(StartPage)
# ======================================== StartPage ========================================
label = Label(StartPage, text ="Start Page")
label.pack()
button1 = Button(StartPage, text ="Page1 function",
command = lambda : show_frame(Page1)
)
button1.place(anchor=CENTER, relx=0.2, rely=0.4)
# ======================================== Page1 ========================================
def openfile(entryBox):
filename = filedialog.askopenfilename(initialdir=os.getcwd(), title="Select file", filetypes=(("all files", "*.*")))
entryBox.delete(0, END)
entryBox.insert(END, filename)
def load_image(entryBox):
filename = entryBox.get()
array = read_file(filename)
image=Image.fromarray(array)
img = ImageTk.PhotoImage(image)
canvas = Canvas(Page1, width=1100, height=830, bg='white')
canvas.place(anchor=CENTER, relx=0.5, rely=0.5)
canvas.create_image((int(canvas_width/2),int(canvas_height/2)), anchor=CENTER, image=img)
fileEntry = Entry(Page1, width=int(100))
fileEntry.place(anchor=CENTER, relx=0.5, y = 56)
return_btn = Button(Page1, text ="Home", command = lambda : show_frame(StartPage), width=7)
return_btn.place(anchor=CENTER, relx=0.1, y=54)
selectButton = Button(Page1, text="Select file", command=lambda: openfile(fileEntry), width=7)
selectButton.place(anchor=CENTER, relx=0.9, y=54)
load_btn = Button(Page1, text ="Load", command = lambda:load_image(fileEntry), width=7)
load_btn.place(anchor=CENTER, relx=0.9, y=100)
window.mainloop()
解决方案
推荐阅读
- powershell - Set-CsUser:无法更新 OnPremLineURI,因为用户已对本地 LineURI 进行了目录同步
- angular - 为什么反射元数据不是 Angular 依赖项?
- android - 在没有导航图的情况下使用带有 safeArgs 的 FragmentContainerView
- android - 为什么读写外部存储在 Fragment Activity 中不起作用?
- javascript - 从 fetch API 问题中获取数据
- javascript - iframe 中的 DOM 选择未正确返回文本内容
- python - 我确实安装了轮子,但它仍然显示“错误:无效命令'bdist_wheel'”
- javascript - iframe 和 CORS 取决于浏览器和设备
- mysql - 如何在mysql中转换haversine公式的结果距离
- typescript - 抽象工厂或生成器类用于具有微小差异的相似对象?