Уведомления

Группа в Telegram: @pythonsu

#1 Март 8, 2020 12:28:26

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при попытки вывести изображение в окне tkinter

При попытке вывести изображение в окно 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()

Офлайн

#2 Март 8, 2020 15:51:58

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Ошибка при попытки вывести изображение в окне tkinter

код не имеет никакого отношения к ошибке, в ошибке сказано что файла “pyimage1” не существует. В приведенном коде нет никакого , “pyimage1” и он работает.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#3 Март 8, 2020 16:35:16

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при попытки вывести изображение в окне tkinter

Действительно работает. Но указанная часть кода в составе общей программы не работает.

Офлайн

#4 Март 8, 2020 17:35:02

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при попытки вывести изображение в окне tkinter

Вот вся программа:

 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()   

Офлайн

#5 Март 9, 2020 00:28:59

ZeroResultDude
Зарегистрирован: 2020-03-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при попытки вывести изображение в окне tkinter

Konstantin1984+
Вот вся программа:
попробуйте указать полный путь к файлу а не относительный, если сработает, объясню в чём была ваша ошибка

Офлайн

#6 Март 9, 2020 10:35:14

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Ошибка при попытки вывести изображение в окне tkinter

Ок, хотя все равно все работает, оно когда говорит что “_tkinter.TclError: image “pyimage1” doesn't exist.” должно еще говорить в каком файле и какой строке вызвано исключение. можете привети полный трейсбек?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#7 Март 9, 2020 14:46:46

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Ошибка при попытки вывести изображение в окне tkinter

Вот полное сообщение об ошибке:

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

Офлайн

#8 Март 9, 2020 21:01:57

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Ошибка при попытки вывести изображение в окне tkinter

даже не знаю что сказать, все долджно работать.. попробуйте Image=PhotoImage(file='Будильник.gif') в вынести из цикла.
Уберите кирилицу из имени файла… ХЗ
Посмотрите в отладчике какой тип у Image после Image=PhotoImage(file='Будильник.gif')



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version