Пытаясь создать небольшую программу на Python, я получаю: AttributeError: модуль 'backend' не имеет атрибута 'insert' - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь написать небольшую программу для использования на работе.Это выглядит так:

enter image description here

Как вы можете видеть, есть два выпадающих меню.При нажатии на одну из кнопок в меню, заполнении двух других записей (Korte beschrijving, datum) и щелчке по пальцу ноги Voeg (Добавить новый инцидент) он должен быть сохранен как запись в базе данных.Я полагаю, что некоторые вещи не работают, и я получаю две ошибки:

Сначала я получил сообщение об ошибке: «В меню параметров нет атрибута get».Тогда я сделал две функции:

def drop_down_soort():
soort.get()
window.quit()

def drop_down_user():
user.get()
window.quit()

Теперь я получаю новую ошибку:

Это весь код: интерфейс и бэкэнд + ошибка.

from tkinter import *
import backend

def alle_incidenten():
   tekst_vak.delete(0,END)
   for row in backend.alle():
   tekst_vak.insert(END,row)

def drop_down_soort():
   soort.get()
   window.quit()

def drop_down_user():
   user.get()
   window.quit()

def voeg_toe():
   backend.voeg_toe(drop_down_soort.get(),drop_down_user.get(),
   beschrijving_tekst.get(),datum_tekst.get())
   tekst_vak.delete(0,END)
   tekst_vak.insert(END,(drop_down_soort.get(),drop_down_user.get(),
   beschrijving_tekst.get(),datum_tekst.get()))

window=Tk()
window.wm_title("T I T A A N  Incidenten Register")

soort = StringVar(window)
soort.set("Soort")

menu = OptionMenu(window, soort, "Incident", "RFC", "Opdracht")
menu.grid(row=0,column=0)

user = StringVar(window)
user.set("User")

user_menu = OptionMenu(window, user, "Jesse", "Jan", "Sirano", "Shannon", 
"Niek", "Thomas", "Patrick")
user_menu.grid(row=1,column=0)

l3=Label(window,text="Korte beschrijving")
l3.grid(row=0,column=2)

l4=Label(window,text="Datum")
l4.grid(row=1,column=2)


beschrijving_tekst=StringVar()
l3=Entry(window,textvariable=beschrijving_tekst)
l3.grid(row=0,column=3)

datum_tekst=StringVar()
l4=Entry(window,textvariable=datum_tekst)
l4.grid(row=1,column=3)

tekst_vak=Listbox(window,height=10,width=35)
tekst_vak.grid(row=2,column=0,rowspan=6,columnspan=2)

scrollbar1=Scrollbar(window)
scrollbar1.grid(row=2,column=2,rowspan=10)

tekst_vak.configure(yscrollcommand=scrollbar1.set)
scrollbar1.configure(command=tekst_vak.yview)

b1=Button(window,text="Alle incidenten", width=14, bg='Gray', 
command=alle_incidenten)
b1.grid(row=2,column=3)

b2=Button(window,text="Voeg incident toe", width=14, bg='Gray', 
command=voeg_toe)
b2.grid(row=3,column=3)

b3=Button(window,text="Pas incident aan", width=14, bg='Gray')
b3.grid(row=4,column=3)

b4=Button(window,text="Verwijder incident", width=14, bg='Red')
b4.grid(row=5,column=3)

b5=Button(window,text="Sluit programma", width=14, bg='Orange')
b5.grid(row=6,column=3)


window.mainloop()

Серверная часть:

import sqlite3

def verbind_met_database():
    verbinding=sqlite3.connect("titaan_incidenten.db")
    cur=verbinding.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS titaan_incidenten
    (id INTEGER PRIMARY KEY, soort TEXT, user TEXT, beschrijving TEXT, 
    datum TEXT)")
    verbinding.commit
    verbinding.close()

def alle():
    verbinding=sqlite3.connect("titaan_incidenten.db")
    cur=verbinding.cursor()
    cur.execute("SELECT * FROM titaan_incidenten")
    rijen=cur.fetchall()
    verbinding.close()
    return rijen

def voeg_toe(soort,user,beschrijving,datum):
    verbinding=sqlite3.connect("titaan_incidenten.db")
    cur=verbinding.cursor()
    cur.execute("INSERT INTO titaan_incidenten VALUES (NULL,?,?,?,?)", 
    (soort,user,beschrijving,datum))
    verbinding.commit()
    verbinding.close()

def pas_aan(id,soort,user,beschrijving,datum):
    verbinding=sqlite3.connect("titaan_incidenten.db")
    cur=verbinding.cursor()
    cur.execute("UPDATE titaan_incidenten SET 
    soort=?,user=?,beschrijving=?,datum=? WHERE id=?", 
    (id,soort,user,beschrijving,datum))
    verbinding.commit
    verbinding.close()

def verwijder():
    verbinding=sqlite3.connect("titaan_incidenten.db")
    cur=verbinding.cursor()
    cur.execute("DELETE FROM titaan_incidenten WHERE id=?",(id,))

ОШИБКА:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\crisc\Anaconda3\lib\tkinter\__init__.py", line 1702, in __ 
call__
return self.func(*args)
File "frontend.py", line 18, in voeg_toe

backend.voeg_toe(drop_down_soort.get(),
drop_down_user.get(),beschrijving_tekst.get(),datum_tekst.get())
AttributeError: 'function' object has no attribute 'get'

Для меня работа с выпадающим меню - это то, чего я никогда раньше не делал.Так что, возможно, созданные мной функции не нужны.Если бы кто-нибудь мог дать мне несколько советов о том, как заставить это меню работать, это было бы здорово!

Я отредактировал его с правильной ошибкой и кодом.Извините за раннюю путаницу.

Спасибо,

Cris

1 Ответ

0 голосов
/ 20 ноября 2018

На основании предоставленной вами информации вы передаете неправильные параметры в функцию backend.voeg_toe().Вместо использования drop_down_soort.get(), drop_down_user.get() вы должны передавать только эти функции без .get(), что не имеет смысла для вашей функции, и возвращать значения внутри функции.

Тела функций могут содержать один или несколькоответное заявлениеОни могут быть расположены где угодно в теле функции.Оператор return завершает выполнение вызова функции и «возвращает» результат, то есть значение выражения, следующего за ключевым словом return, вызывающей стороне.Если оператор return не имеет выражения, возвращается специальное значение None.Если в коде функции нет оператора возврата, функция завершается, когда поток управления достигает конца тела функции и возвращается значение «Нет».

например:

def drop_down_soort():
   test = soort.get() #not sure even if soort.get() is getting any value, but I suppose yes!!!!
   window.quit()
   return test

def drop_down_user():
   test = user.get() #not sure even if user.get() is getting any value, but I suppose yes!!!!
   window.quit()
   return test

, поэтому, когда бы вы ни вызвали backend.voeg_toe(drop_down_soort(),drop_down_user(),....), он получит возвращаемые значения этих двух функций и передаст его в качестве параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...