打开新Tkinter窗口时图像不显示在画布上

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打开新Tkinter窗口时图像不显示在画布上相关的知识,希望对你有一定的参考价值。

我正在使用TKinter创建GUI,主窗口可以从其主菜单打开自己的新实例。

但是,当我创建窗口的新实例时,不会出现应该出现在画布上的图像。有人可以提供帮助吗?

这是我的GUI代码:

class MainPage: 

    def __init__(self, master):
        master.title("EIL Viewer")
        master.geometry('1000x650')

        #creating the main menu
        master.option_add('*tearOff', False)
        mainmenu = Menu(master)
        master.configure(menu = mainmenu)
        File = Menu(mainmenu)
        mainmenu.add_cascade(menu= File, label = 'File')

        #setting up commands for main menu
        File.add_command( label = 'New Window', command = lambda: New() , accelerator = 'Ctrl + N')

        #creating the canvas on the window
        self.canvas = Canvas(master)
        self.canvas.pack()
        self.canvas.pack_configure(fill= BOTH, expand = True)
        self.canvas.config(width=300, height= 500,background = 'white')


        #setting the image on the canvas
        photo = PhotoImage( file = 'C:/Users/Admin/Documents/Untitled Folder/sampleimage.png')
        self.canvas.img = photo #here I am storing the image to the canvas so that it stays in the memory 
        self.image = self.canvas.create_image(150,150, image = self.canvas.img)

这是我如何编写从主菜单打开新实例的函数:

    #setting n = 0 counter to distinguish the different windows
n = 0 

def New():
    n = Tk()

    mainpage = MainPage(n)

    n.mainloop()

    n = n + 1 

我设置计数器n = n + 1的原因是每次调用我的窗口的新实例时,它都不会运行通过相同主窗口的窗口。这是多余的吗?

当我尝试从菜单运行新窗口命令时,我得到关于加载到画布上的图像的以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "<ipython-input-3-803bc8733dc3>", line 60, in <lambda>
    File.add_command( label = 'New Window', command = lambda: New() , accelerator = 'Ctrl + N')
  File "<ipython-input-3-803bc8733dc3>", line 1425, in New
    mainpage = MainPage(n)
  File "<ipython-input-3-803bc8733dc3>", line 480, in __init__
    self.eil = self.canvas.create_image(150,150, image = self.canvas.img)
  File "C:UsersCamilla TacAnaconda3lib	kinter\__init__.py", line 2483, in create_image
    return self._create('image', args, kw)
  File "C:UsersCamilla TacAnaconda3lib	kinter\__init__.py", line 2474, in _create
    *(args + self._options(cnf, kw))))
_tkinter.TclError: image "pyimage16" doesn't exist

谁能帮我解决这个问题???

答案

您无法在Tk的两个实例之间共享图像。一个合适的Tkinter GUI应该总是只有一次Tk实例。如果你需要多个窗口,除了第一个窗口之外的每个窗口都需要是Toplevel的一个实例。

以上是关于打开新Tkinter窗口时图像不显示在画布上的主要内容,如果未能解决你的问题,请参考以下文章

在 tkinter 画布中显示图像

将matplotlib嵌入到tkinter画布中会打开两个窗口

如何在不使用 tkinter 打开控制台窗口的情况下运行 Python 脚本?

如何使用 PYTHON 的“tkinter”模块在画布上显示图像,特别适用于 linux?

tkinter canvas create_window

Python Tkinter。以画布形式打开 BMP 文件