首页 > 解决方案 > 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()



在此处输入图像描述

标签: pythonimagetkintercanvas

解决方案


推荐阅读