Изображение не отображается на холсте при открытии нового окна Tkinter - PullRequest
0 голосов
/ 17 сентября 2018

Я создаю графический интерфейс с использованием TKinter, главное окно может открывать новые экземпляры самого себя из своего главного меню.

Это работает, однако, когда я создаю новый экземпляр окна, изображение, которое должно появиться на холсте, не появляется. Кто-нибудь может помочь?

Это мой код 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, заключается в том, что каждый раз, когда вызывается новый экземпляр моего окна, он не запускает окно, проходящее одно и то же главное окно. Это лишнее?

Когда я пытаюсь запустить команду New window из меню, я получаю следующую ошибку относительно изображения, загруженного на холст:

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:\Users\Camilla Tac\Anaconda3\lib\tkinter\__init__.py", line 2483, in create_image
    return self._create('image', args, kw)
  File "C:\Users\Camilla Tac\Anaconda3\lib\tkinter\__init__.py", line 2474, in _create
    *(args + self._options(cnf, kw))))
_tkinter.TclError: image "pyimage16" doesn't exist

Может кто-нибудь помочь мне решить эту проблему ???

1 Ответ

0 голосов
/ 17 сентября 2018

Вы не можете делиться изображениями между двумя экземплярами Tk.Правильный графический интерфейс Tkinter всегда должен иметь ровно один экземпляр Tk.Если вам нужно несколько окон, каждое окно, кроме первого, должно быть экземпляром Toplevel.

...