Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2020 09:10:13

Konstantin1984+
Зарегистрирован: 2020-02-04
Сообщения: 87
Репутация: +  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 “/home/konstantin/Рабочий стол/Документы Python/Ежедневник.py”, line 116, in vvod
cur.execute('UPDATE perechen SET znach=slova WHERE id_perechen=kluch+y+1')
sqlite3.OperationalError: no such column: slova

Если подставить в инструкцию 116 строки вместо переменных конкретные значения, то программа начинает работать, но мне же нужно, чтобы значения были изменяемые, а не постоянно выводилось одно и то же. Прошу пояснить, как исправить ситуацию. Код привожу ниже.

 from tkinter import *
import tkinter.ttk as ttk
import time
import calendar
import sqlite3
tek_god=time.strftime('%Y')
tek_mes=time.strftime('%m')
root=Tk()
root.title('Ежедневник')
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')
zapisi=Frame(root,bg='white')
spiski.grid(row=0,column=1)
tablica.grid(row=1,column=1)
zapisi.grid(row=2,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)
def perechen_del(event):
    item=tablica.find_closest(event.x,event.y)
    nomer=int(tablica.gettags(item)[0])
    #tablica.itemconfig(event.widget,fill='red')
    nadp_zapisi1=Label(zapisi,text='09.00-09.30')
    nadp_zapisi2=Label(zapisi,text='09.30-10.00')
    nadp_zapisi3=Label(zapisi,text='10.00-10.30')
    nadp_zapisi4=Label(zapisi,text='10.30-11.00')
    nadp_zapisi5=Label(zapisi,text='11.00-11.30')
    nadp_zapisi6=Label(zapisi,text='11.30-12.00')
    nadp_zapisi7=Label(zapisi,text='12.00-12.30')
    nadp_zapisi8=Label(zapisi,text='12.30-13.00')
    nadp_zapisi9=Label(zapisi,text='13.00-13.30')
    nadp_zapisi10=Label(zapisi,text='13.30-14.00')
    nadp_zapisi11=Label(zapisi,text='14.00-14.30')
    nadp_zapisi12=Label(zapisi,text='14.30-15.00')
    nadp_zapisi13=Label(zapisi,text='15.00-15.30')
    nadp_zapisi14=Label(zapisi,text='15.30-16.00')
    nadp_zapisi15=Label(zapisi,text='16.00-16.30')
    nadp_zapisi16=Label(zapisi,text='16.30-17.00')
    nadp_zapisi17=Label(zapisi,text='17.00-17.30')
    nadp_zapisi18=Label(zapisi,text='17.30-18.00')
    knopka=Button(zapisi,text='Сохранение')
    nadp_zapisi1.grid(row=0,column=1)
    nadp_zapisi2.grid(row=1,column=1)
    nadp_zapisi3.grid(row=2,column=1)
    nadp_zapisi4.grid(row=3,column=1)
    nadp_zapisi5.grid(row=4,column=1)
    nadp_zapisi6.grid(row=5,column=1)
    nadp_zapisi7.grid(row=6,column=1)
    nadp_zapisi8.grid(row=7,column=1)
    nadp_zapisi9.grid(row=8,column=1)
    nadp_zapisi10.grid(row=9,column=1)
    nadp_zapisi11.grid(row=10,column=1)
    nadp_zapisi12.grid(row=11,column=1)
    nadp_zapisi13.grid(row=12,column=1)
    nadp_zapisi14.grid(row=13,column=1)
    nadp_zapisi15.grid(row=14,column=1)
    nadp_zapisi16.grid(row=15,column=1)
    nadp_zapisi17.grid(row=16,column=1)
    nadp_zapisi18.grid(row=17,column=1)
    knopka.grid(row=18,column=1)
    j=2
    kluch=god*1000000+mesyac_chislo*10000+nomer*100
    print(kluch+1)
    dannie=sqlite3.connect('baza.db')
    cur=dannie.cursor()
    cur.execute('SELECT*FROM perechen')
    b=cur.fetchall()
    dannie.commit()
    cur.close()
    dannie.close()
    print(b)
    for i in range(18):
        znach1=StringVar()
        delo=Entry(zapisi,textvariable=znach1)
        delo.grid(row=i,column=j)
        for elem in b:
            for n in range(2):
                if elem[0]==kluch+i+1:
                    stroka=elem[1]
                    print(stroka)
                    znach1.set(stroka)
    
        
    def vvod(event):
        nonlocal kluch
        dannie=sqlite3.connect('baza.db')
        cur=dannie.cursor()
        cur.execute('SELECT*FROM perechen')
        b=cur.fetchall()
        for y in range(18):
            widget=zapisi.grid_slaves(row=y,column=2)[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=slova WHERE id_perechen=kluch+y+1') 
        dannie.commit()
        cur.close()
        dannie.close()
        dannie=sqlite3.connect('baza.db')
        cur=dannie.cursor()
        cur.execute('SELECT*FROM perechen')
        for id_perechen, znach in cur:
            print(id_perechen,znach)
        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
    god=int(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)
            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)
root.mainloop()   




Офлайн

#2 Март 1, 2020 15:33:13

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

Ошибка при попытке изменить значение строки Ежедневника

Я нашел решение. Слава Интернету. Если кому интересно, то писать нужно так:

 cur.execute('UPDATE perechen SET znach=? WHERE id_perechen=?',\
                            (slova,kluch+y+1))

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version