Форум сайта python.su
При попытке вывести изображение в окно tkinter компьютер указывает ошибку следующего содержания:
_tkinter.TclError: image “pyimage1” doesn't exist.
Прошу пояснить в чем проблема, файл с картинкой лежит в той же папке, что и сама программа, код указан ниже.
from tkinter import * okno_soobshenia=Tk() okno_soobshenia.title('Уведомление о событии') okno_soobshenia.geometry('280x300+500+500') Image=PhotoImage(file='Будильник.gif') kartinka=Label(okno_soobshenia,image=Image) kartinka.pack() okno_soobshenia.mainloop()
Офлайн
код не имеет никакого отношения к ошибке, в ошибке сказано что файла “pyimage1” не существует. В приведенном коде нет никакого , “pyimage1” и он работает.
[code python][/code]
Офлайн
Действительно работает. Но указанная часть кода в составе общей программы не работает.
Офлайн
Вот вся программа:
from tkinter import * import tkinter.ttk as ttk import time import calendar import sqlite3 tek_god=time.strftime('%Y') tek_mes=time.strftime('%m') tek_den=time.strftime('%d') root=Tk() root.title('Ежедневник') root.geometry('280x300+100+100') spiski=Frame(root) nadp1=Label(spiski,text='Год') spisok_god=ttk.Combobox(spiski,height=6, values=[2019,2020,2021,2022,2023,2024]) spisok_god.set(tek_god) nadp2=Label(spiski,text='Месяц') mesyaci=['январь','февраль','март','апрель','май','июнь','июль','август', 'сентябрь','октябрь','ноябрь','декабрь'] spisok_mesyac=ttk.Combobox(spiski,height=12,values=mesyaci) spisok_mesyac.set(mesyaci[int(tek_mes)-1]) tablica=Canvas(width=280,height=260,bg='gray80') spiski.grid(row=0,column=1) tablica.grid(row=1,column=1) nadp1.grid(row=0,column=1) spisok_god.grid(row=0,column=2) nadp2.grid(row=1,column=1) spisok_mesyac.grid(row=1,column=2) #nach_perioda=[] def perechen_del(event): item=tablica.find_closest(event.x,event.y) nomer_dnya=tablica.gettags(item)[0] nomer=int(nomer_dnya) if mesyac=='март' or mesyac=='август': data_vibor=nomer_dnya+' '+mesyac+'а'+' '+god_str+' года' elif mesyac!='март' and mesyac!='август': data_vibor=nomer_dnya+' '+mesyac[:-1]+'я'+' '+god_str+' года' #tablica.itemconfig(event.widget,fill='red') window=Toplevel(root) window.geometry('800x530+390+100') window.title(data_vibor) zapisi=Frame(window,bd=10) zapisi.grid(row=0,column=1) knopka=Button(window,bg='white',text='''С о х р а н и т ь''',font='Roman 14') knopka.grid(row=0,column=2) chas_nach=0 min_nach=0 m=1 #global nach_perioda for n in range(48): min_con=min_nach+30 if min_con==60: chas_con=chas_nach+1 min_con=0 else: chas_con=chas_nach if chas_nach<10: chas_nach_str='0'+str(chas_nach) else: chas_nach_str=str(chas_nach) if chas_con<10: chas_con_str='0'+str(chas_con) else: chas_con_str=str(chas_con) if min_nach==0: min_nach_str=str(min_nach)+'0' else: min_nach_str=str(min_nach) if min_con==0: min_con_str=str(min_con)+'0' else: min_con_str=str(min_con) nadp_zapisi=Label(zapisi,text='{0}.{1}-{2}.{3}'.\ format(chas_nach_str,min_nach_str,\ chas_con_str,min_con_str)) #elem_nach_perioda='{0}.{1}'.format(chas_nach_str,min_nach_str) #nach_perioda.append(elem_nach_perioda) min_nach=min_con chas_nach=chas_con if n>23: n=n-24 m=3 nadp_zapisi.grid(row=n,column=m) kluch=god*1000000+mesyac_chislo*10000+nomer*100 dannie=sqlite3.connect('baza.db') cur=dannie.cursor() cur.execute('SELECT*FROM perechen') b=cur.fetchall() dannie.commit() cur.close() dannie.close() j=2 for i in range(48): znach1=StringVar() delo=Entry(zapisi,textvariable=znach1,width=35) t=i if t>23: t=t-24 j=4 delo.grid(row=t,column=j) for elem in b: #for n in range(2): if elem[0]==kluch+i+1: stroka=elem[1] znach1.set(stroka) def vvod(event): nonlocal kluch dannie=sqlite3.connect('baza.db') cur=dannie.cursor() cur.execute('SELECT*FROM perechen') b=cur.fetchall() j=2 for y in range(48): t=y if t>23: t=t-24 j=4 widget=zapisi.grid_slaves(row=t,column=j)[0] slova=widget.get() a=(kluch+y+1,slova) n=0 for elem in b: #for i in range(2): if elem[0]==kluch+y+1: n=1 if n!=1: sql_a="INSERT INTO perechen VALUES(?,?)" cur.execute(sql_a,a) elif n==1: cur.execute('UPDATE perechen SET znach=? WHERE id_perechen=?',\ (slova,kluch+y+1)) dannie.commit() cur.close() dannie.close() knopka.bind('<Button-1>',vvod) def obnovl_kalendar(e=None): tablica.delete('all') global mesyaci global god global mesyac_chislo global god_str global mesyac god=int(spisok_god.get()) god_str=spisok_god.get() mesyac=spisok_mesyac.get() mesyac_chislo=mesyaci.index(mesyac)+1 c=calendar.Calendar(0) kalendar=c.monthdayscalendar(god, mesyac_chislo) x=0;y=0 for n in range(7): dni=tablica.create_rectangle(x,y,x+40,y+20,fill="white") x=x+40 y=y+20 for i in range(6): x=0 for j in range(7): kletka=tablica.create_rectangle(x,y,x+40,y+40,fill="white") x=x+40 y=y+40 dni_nedeli=['Пн','Вт','Ср','Чт','Пт','Сб','Вс'] x=10;y=10 for elem in dni_nedeli: tablica.create_text(x,y,text=elem,anchor="w",font='Roman 12', justify=CENTER,fill="black") x=x+40 y=40 for elem in kalendar: x=10 for elem1 in elem: if elem1==0:elem1='' elif elem1<10:elem1=' '+str(elem1) chislo=tablica.create_text(x,y,text=elem1,anchor="w", font='Roman 12',justify=CENTER, fill='black',tag=elem1) if god==int(tek_god) and mesyac_chislo==int(tek_mes)\ and elem1==' '+str(int(tek_den)): tablica.itemconfig(chislo,fill="red",font='Roman 14') if god==int(tek_god) and mesyac_chislo==int(tek_mes)\ and elem1==str(int(tek_den)): tablica.itemconfig(chislo,fill="red",font='Roman 14') tablica.tag_bind(chislo,'<Button-1>',perechen_del) x=x+40 y=y+40 obnovl_kalendar() spisok_god.bind('<<ComboboxSelected>>', obnovl_kalendar) spisok_mesyac.bind('<<ComboboxSelected>>', obnovl_kalendar) #Создаем список дел на текущую дату для дальнейшего вывода сообщения о событии nach_perioda=[] chas_nach=0 min_nach=0 for n in range(48): if min_nach==60: chas_nach=chas_nach+1 min_nach=0 if chas_nach<10: chas_nach_str='0'+str(chas_nach) else: chas_nach_str=str(chas_nach) if min_nach==0: min_nach_str=str(min_nach)+'0' else: min_nach_str=str(min_nach) min_nach=min_nach+30 elem_nach_perioda='{0}.{1}'.format(chas_nach_str,min_nach_str) nach_perioda.append(elem_nach_perioda) kluch_tek=int(tek_god)*1000000+int(tek_mes)*10000+int(tek_den)*100 dannie=sqlite3.connect('baza.db') cur=dannie.cursor() cur.execute('SELECT*FROM perechen') b=cur.fetchall() dannie.commit() cur.close() dannie.close() stroki=[] for i in range(48): for elem in b: if elem[0]==kluch_tek+i+1: stroki.append(elem[1]) spisok_tek_del=list(zip(nach_perioda,stroki)) print(spisok_tek_del) def uvedoml_o_sobit(): for elem_spisok in spisok_tek_del: if time.strftime("%H.%M")==elem_spisok[0] and elem_spisok[1]!='': okno_soobshenia=Tk() okno_soobshenia.title('Уведомление о событии') okno_soobshenia.geometry('280x300+500+500') Image=PhotoImage(file='Будильник.gif') kartinka=Label(okno_soobshenia,image=Image) kartinka.pack() soobshenie=Label(okno_soobshenia,text=elem_spisok[1],height=10,width=20) soobshenie.pack() knopka_oznakoml=Button(okno_soobshenia,text='OK',height=2,width=20) knopka_oznakoml.pack() def oznakomlen(event): okno_soobshenia.destroy() knopka_oznakoml.bind('<Button-1>',oznakomlen) root.after(36000,uvedoml_o_sobit) root.after(36000,uvedoml_o_sobit) root.mainloop()
Офлайн
Konstantin1984+попробуйте указать полный путь к файлу а не относительный, если сработает, объясню в чём была ваша ошибка
Вот вся программа:
Офлайн
Ок, хотя все равно все работает, оно когда говорит что “_tkinter.TclError: image “pyimage1” doesn't exist.” должно еще говорить в каком файле и какой строке вызвано исключение. можете привети полный трейсбек?
[code python][/code]
Офлайн
Вот полное сообщение об ошибке:
Exception in Tkinter callback
Traceback (most recent call last):
File “/usr/lib/python3.4/tkinter/__init__.py”, line 1536, in __call__
return self.func(*args)
File “/usr/lib/python3.4/tkinter/__init__.py”, line 585, in callit
func(*args)
File “/home/konstantin/Рабочий стол/Ежедневник/Ежедневник.py”, line 251, in uvedoml_o_sobit
kartinka=Label(okno_soobshenia,image=Image)
File “/usr/lib/python3.4/tkinter/__init__.py”, line 2607, in __init__
Widget.__init__(self, master, ‘label’, cnf, kw)
File “/usr/lib/python3.4/tkinter/__init__.py”, line 2125, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: image “pyimage1” doesn't exist
Офлайн
даже не знаю что сказать, все долджно работать.. попробуйте Image=PhotoImage(file='Будильник.gif') в вынести из цикла.
Уберите кирилицу из имени файла… ХЗ
Посмотрите в отладчике какой тип у Image после Image=PhotoImage(file='Будильник.gif')
[code python][/code]
Офлайн