2015-04-14 4 views
0

Я пытаюсь создать приложение, в котором есть главное меню и меню настроек. Я хочу установить фон для каждого из них. Но я начинаю с меню настроек. Я получаю сообщение об ошибке: _tkinter.TclError: image "pyimage1" doesn't exist. Что я делаю неправильно?Использование PhotoImage для отображения изображения в Tkinter в Python

from tkinter import * 
from tkinter.ttk import * 

install_directory = '...' 


# ***********************************MAIN MENU***************************************************** 
def root(): 

    # ~~~Defines window~~~ 
    main_window = Tk() 
    main_window.iconbitmap(install_directory + r'\resources\icons\logo.ico') # Changes the icon for window 
    main_window.title('Auto Transfer') # Changes window name 
    main_window.geometry("300x200") 

    # ~~Adds a background~~~ 
    background = PhotoImage(file=install_directory + r'\resources\backgrounds\stardust.gif') 
    label = Label(main_window, image=background) 
    label.pack() 

    # ~~~Menu Bar~~~ 
    menubar = Menu(main_window) # Creates the menu bar 

    # ~~~File menu~~~ 
    filemenu = Menu(menubar, tearoff=0) 
    filemenu.add_command(label="Quit", command=lambda: main_window.destroy()) # Exits the program 

    # ~~~Settings menu~~~ 
    settingsmenu = Menu(menubar, tearoff=0) 
    settingsmenu.add_command(label="Change settings...", command=lambda: options(main_window)) 

    # ~~~Add menus to bar~~~ 
    menubar.add_cascade(label='File', menu=filemenu) 
    menubar.add_cascade(label='Settings', menu=settingsmenu) 

    # ~~Adds menu bar to the screen~~~ 
    main_window.config(menu=menubar) 

    # ~~Adds 'RUN' button~~ 


    # ~~~Runs window~~~ 
    main_window.mainloop() 


# *********************************OPTIONS MENU**************************************************** 
def options(main_window): 

    options_window = Toplevel() 
    options_window.iconbitmap(install_directory + r'\resources\icons\logo.ico') # Changes the icon for window 
    options_window.title('Settings') # Changes window name 
    options_window.geometry("720x480") 

    # ~~Adds a background~~~ 
    background = PhotoImage(file=install_directory + r'\resources\backgrounds\stardust.gif') 
    label = Label(options_window, image=background) 
    label.pack() 




# *******************************RUN APP************************************************************** 
if __name__ == '__main__': 
    root() 
+0

Какая строка дает ошибку? – Marcin

+0

Эти строки включают изображение, которое должно отображаться: 'background = PhotoImage (файл = install_directory + r '\ resources \ backgrounds \ subtle.gif') label = Label (options_window, image = background) label.pack() ' –

ответ

0

Я думаю, что причина в том, что вы используете два Tk() экземпляры в коде. Это не очень хорошо. Приложение tkinter должно иметь только один mainloop (т. Е. Один экземпляр Tk()). Чтобы сделать другие окна, используйте виджет TopLevel.

Используйте это в параметрах функционирование вместо того, чтобы новый Tk():

options_window = Toplevel() 

Надеется, что это помогает. Также убедитесь, что ваши пути к файлам изображений верны.

+0

Это избавило от ошибки, но изображение все еще не отображается в окне параметров. Я использовал один и тот же код: 'background = PhotoImage (file = '...') label = Label (options_window, image = background) label.pack()' , чтобы добавить тот же фон в главное окно, поэтому я не уверен, в чем проблема. –

+0

Можете ли вы изменить свой вопрос и предоставить обновленный код. – Marcin

+0

Обновлено сейчас –

Смежные вопросы