我正在尝试开发一个程序,它有一个主框架(根),其他框架通过菜单打开和关闭。主框架的图像插入正常,但是一旦我打开另一个框架并尝试使用以下方法插入新图像:
canvas = Canvas(date-time_window, width = 200, height = 200, bg = 'yellow')
canvas.create_image(0, 0, image = moon_photo, anchor = NW)
我得到一个错误 pyimage2 不存在,但是如果我删除对框架的引用:
canvas = Canvas(width = 200, height = 200, bg = 'yellow')
图像可以出现在根框架中,但当然不是我想要的那个。
是否可以一次显示超过一帧的图像?
我还注意到,如果我关闭主框架然后重新打开它而不完全重新启动,我会得到与主框架中显示的图像相同的错误。我再次得到 pyimage2 不存在加上根框架中的画布是空白的。
我已经阅读了关于 tkinter 如何处理垃圾的评论,并怀疑这可能是相关的。我还阅读了一条评论,说图像应该附加第二个参考,但还没有看到如何实现这个动作。
这可以在 tkinter 中完成,还是我需要考虑使用枕头来代替?
示例代码,包含原始代码。
该代码是从根窗口中的菜单调用的,旨在显示本地日期和时间信息。我试图获取当前月相的图片,包括:
def date_time():
date_time_window = Tk()
date_time_window.title('Date & Time')
date_time_window.geometry('650x350')
# Widgets
present_date = today
main_heading = Label(date_time_window, text = 'Date & Time')
line1 = Canvas(date_time_window, width = 650, height = 3)
line1.create_line(0,2 , 650,2, width = 1, fill = 'cyan')
date_txt = Label(date_time_window,text = 'Date: ')
date_value = Label(date_time_window, text = today.strftime('%d') + '/' + today.strftime('%m') + '/' + today.strftime('%y'))
time_utc_txt = Label(date_time_window, text = 'UTC Time:')
time_utc_value = Label(date_time_window, text = str(datetime.utcnow())[11:19])
dls_txt = Label(date_time_window, text = 'DLS on/off: ')
if moon_phase_number == 0:
moon_photo = PhotoImage( file = 'images\moon_phase_0.gif')
elif moon_phase_number == 1:
moon_photo = PhotoImage( file = 'images\moon_phase_1.gif')
canvas = Canvas(date_time_window, width = 200, height = 200, bg = 'yellow')
canvas.create_image(0, 0, image = moon_photo, anchor = NW)
canvas.place( x = 300, y = 150)
close_btn.configure( command = date_time_window.destroy)
date_time_window.mainloop()