Проблема - Tkinter необходимо проверить, находится ли значение в поле ввода в столбце с указанными значениями c в моей таблице базы данных sqlite. - PullRequest
0 голосов
/ 24 января 2020

Я новичок в этом сообществе, я пытаюсь выучить python (моя версия 3.7 для windows 10)

Я создал эту программу (я прикреплю код ниже) с помощью python / Tkinter

вот где я застрял:

Когда пользователь нажимает sh кнопку «Отправить», мне нужно проверить, если поле ввода «Номер назначения» (если вы запустите программу, она находится на вершине GUI), уже существующей в моей таблице sqlite3, прежде чем вставлять все данные, которые отправленный пользователем будет храниться в базе данных

В основном мне нужно, чтобы каждый представленный опрос имел уникальный номер назначения

Если бы вы могли помочь, было бы здорово (не спите неделю)

Заранее благодарю за помощь

import backend
import csv
from backend import write_to_csv
import os
from Send_email_gui import send_email
from backend import check_assignment


def add_entry_command():
    #check_assignment_no.check_assignment(assignment_no_text.get())
    if check_assignment(assignment_no_text.get())== 0:
        backend.insert(client_code_text.get(), client_name_text.get(), assignment_no_text.get(), accountant_text.get(), year_end_text.get(), file_presentation_text.get(), quality_of_job_processed_text.get(), queries_text.get(), indexing_text.get(), final_reports_text.get(), documents_handling_text.get(), meeting_deadlines_text.get(), communication_text.get(), analytical_review_text.get(), overall_job_text.get(), suggestion_text.get())
        send_email(accountant_text, client_code_text, client_name_text, assignment_no_text, year_end_text, file_presentation_text, quality_of_job_processed_text, queries_text, indexing_text, final_reports_text, documents_handling_text, meeting_deadlines_text, communication_text, analytical_review_text, overall_job_text, suggestion_text)
        messagebox.showinfo('Confirmation', 'Thank you for your submission, click ok and close')        
    else:
        messagebox.showinfo('Assignment number used', 'Assignment number already used, please check again and submit')

def __init__(self, assignment_no_, accountant_, year_end_, client_code_, client_name_, file_presentation_, quality_of_job_processed_, queries_, 
    indexing_, final_reports_, documents_handling_, meeting_deadlines_, communication_, analytical_review_, overall_rate_, suggestion_):
        self.assignment_no_=assignment_no_
        self.accountant_=accountant_
        self.year_end_=year_end_
        sel.client_code_=client_code_
        self.client_name_=client_name_
        self.file_presentation_=file_presentation_
        self.quality_job_=quality_of_job_processed_
        self.queries_assumptions_=queries_
        self.indexing_cross_ref_=indexing_
        self.final_reports_=final_reports_
        self.doc_handling_=documents_handling_
        self.meet_deadlines_=meeting_deadlines_
        self.communi_=communication_
        self.analytical_rev_=analytical_review_
        self.overall_rate_=overall_rate_
        self.suggestion_box_=suggestion_



window=Tk()

"""
Center the window of the program
"""
# Gets the requested values of the height and widht.
windowWidth = window.winfo_reqwidth()
windowHeight = window.winfo_reqheight()
#print("Width",windowWidth,"Height",windowHeight)

# Gets both half the screen width/height and window width/height
positionRight = int(window.winfo_screenwidth()/6 - windowWidth/6)
positionDown = int(window.winfo_screenheight()/6 - windowHeight/6)

# Positions the window in the center of the page.
window.geometry("+{}+{}".format(positionRight, positionDown))

"""
Top data entry level 
TO DO - build function to return client name directly from Iris database - build button
"""

label_title=Label(window, text="Global Infosys feedback collector", height=3, fg="blue", font=(20))
label_title.grid(row=0, column=2)

l1=Label(window, text="Client code")
l1.grid(row=4, column=1, sticky='E')

l2=Label(window, text="Client name")
l2.grid(row=4, column=3, sticky='E')



l3=Label(window, text="Assignment no:")
l3.grid(row=5, column=1, sticky='E')

l4=Label(window, text="Accountant:")
l4.grid(row=6, column=1, sticky='E')

l5=Label(window, text="Year end:")
l5.grid(row=7, column=1, sticky='E')

"""
Second and third titles - form beginning
"""


label_second_title=Label(window, text="Scoring Referance (enter only 1 number):", height=3, fg="blue")
label_second_title.grid(row=8, column=1, columnspan=2, sticky=W)

label_third_title=Label(window, text="Excellent: 10 | Good: 9 - 8 | Avarage: 7 - 6 | Poor: 0 - 5", height=3, fg="blue")
label_third_title.grid(row=9, column=1, columnspan=2, sticky=W)

empty_label=Label(window, text=" ", width=15)
empty_label.grid(row=9, column=0)

second_empty_label=Label(window, text=" ", width=15)
second_empty_label.grid(row=4, column=6)

#third_empty_label=Label(window, text="View Entry", height=3)
#third_empty_label.grid(row=26, column=1)


"""
Form level labels
"""

l6=Label(window, text="File presentation:")
l6.grid(row=10, column=1, sticky='E')

l7=Label(window, text="Quality of job processing")
l7.grid(row=11, column=1, sticky='E')

l8=Label(window, text="Queries and assumptions:")
l8.grid(row=12, column=1, sticky='E')

l9=Label(window, text="Indexing and cross referencing:")
l9.grid(row=13, column=1, sticky='E')

l10=Label(window, text="Final reports (draft accounts):")
l10.grid(row=14, column=1, sticky='E')

l11=Label(window, text="Documents handling / usage:")
l11.grid(row=15, column=1)

l12=Label(window, text="Meeting deadlines:")
l12.grid(row=16, column=1, sticky='E')

l13=Label(window, text="Communication:")
l13.grid(row=17, column=1, sticky='E')

l14=Label(window, text="Analytical review:")
l14.grid(row=18, column=1, sticky='E')

l15=Label(window, text="Overall Job rating:")
l15.grid(row=19, column=1, sticky='E')

l16=Label(window, text="Suggestion / Review:")
l16.grid(row=20, column=1, sticky='E')

l25=Label(window, text="@ A production of Shehan H.", fg="red")
l25.grid(row=30, column=6, sticky='E')

"""
Entry boxes top
"""

client_code_text=StringVar()
e1=Entry(window, textvariable=client_code_text)
e1.grid(row=4, column=2)


client_name_text=StringVar()
e2=Entry(window, textvariable=client_name_text)
e2.grid(row=4, column=4)





assignment_no_text=StringVar()
e3=Entry(window, textvariable=assignment_no_text)
e3.grid(row=5, column=2)

accountant_text=StringVar()
e4=Entry(window, textvariable=accountant_text)
e4.grid(row=6, column=2)

year_end_text=StringVar()
e5=Entry(window, textvariable=year_end_text)
e5.grid(row=7, column=2)

"""
Entry boxes form level
"""

file_presentation_text=StringVar()
e6=Entry(window, textvariable=file_presentation_text)
e6.grid(row=10, column=2)

quality_of_job_processed_text=StringVar()
e7=Entry(window, textvariable=quality_of_job_processed_text)
e7.grid(row=11, column=2)

queries_text=StringVar()
e8=Entry(window, textvariable=queries_text)
e8.grid(row=12, column=2)

indexing_text=StringVar()
e9=Entry(window, textvariable=indexing_text)
e9.grid(row=13, column=2)

final_reports_text=StringVar()
e10=Entry(window, textvariable=final_reports_text)
e10.grid(row=14, column=2)

documents_handling_text=StringVar()
e11=Entry(window, textvariable=documents_handling_text)
e11.grid(row=15, column=2)

meeting_deadlines_text=StringVar()
e12=Entry(window, textvariable=meeting_deadlines_text)
e12.grid(row=16, column=2)

communication_text=StringVar()
e13=Entry(window, textvariable=communication_text)
e13.grid(row=17, column=2)

analytical_review_text=StringVar()
e14=Entry(window, textvariable=analytical_review_text)
e14.grid(row=18, column=2)

overall_job_text=StringVar()
e15=Entry(window, textvariable=overall_job_text)
e15.grid(row=19, column=2)

suggestion_text=StringVar()
e16=Entry(window, textvariable=suggestion_text, width=50)
e16.grid(row=20, column=2, padx=5,pady=10,ipady=3)

"""
Buttons

"""
b1=Button(window, text="Submit to GI", width=12, command=add_entry_command)
b1.grid(row=25, column=2)

b2=Button(window, text="Export report", width=12, command=write_to_csv)
b2.grid(row=25, column=3)

b3=Button(window, text="Connect client", width=12)
b3.grid(row=4, column=5)

"""
List box to view results
Maight be deleted and changed with popup to confirm



list1=Listbox(window, height=1, width=70)
list1.grid(row=26, column=2)
"""

window.mainloop()

и это внутренний модуль

import sqlite3
import csv
import os
from tkinter import messagebox
from tkinter import *


def connect():
    conn=sqlite3.connect("lite.db")
    cur=conn.cursor()
    cur.execute("CREATE TABLE IF NOT EXISTS gi_store (id INTEGER PRIMARY KEY, client_code_ text, client_name_  text, assignment_no_ text, accountant_ text,  year_end_ text, file_presentation_ integer, quality_of_job_processed_ integer, queries_ integer, indexing_ integer, final_reports_ integer, documents_handling_ integer, meeting_deadlines_ integer, communication_ integer, analytical_review_ integer, overall_job_ integer, suggestion_  text)")
    conn.commit()
    conn.close()

def insert(client_code_, client_name_, assignment_no_, accountant_,  year_end_, file_presentation_, quality_of_job_processed_, queries_, indexing_, final_reports_, documents_handling_, meeting_deadlines_, communication_, analytical_review_, overall_job_, suggestion_):
    conn=sqlite3.connect("lite.db")
    cur=conn.cursor()
    cur.execute("INSERT INTO gi_store VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (client_code_, client_name_, assignment_no_, accountant_,  year_end_, file_presentation_, quality_of_job_processed_, queries_, indexing_, final_reports_, documents_handling_, meeting_deadlines_, communication_, analytical_review_, overall_job_, suggestion_))
    conn.commit()
    conn.close()

def view():
    conn=sqlite3.connect("lite.db")
    cur=conn.cursor()
    cur.execute("SELECT * FROM gi_store")
    rows=cur.fetchall()
    conn.close()
    return rows

def write_to_csv():
    conn=sqlite3.connect("lite.db")
    cur=conn.cursor()
    cur.execute("SELECT * FROM gi_store")
    csvWriter = csv.writer(open("output.csv", "w", newline=''))

    rows = cur.fetchall()
    csvWriter.writerow(["ID", "Client Code", "Client Name", "Assignment number", "Accountant", "Year End", "File Presentation", "Quality of job processed", "Queries", "Indexing", "Final reports", "Doc. handling", "Meeting deadlines", "Communication", "Analytical review", "Overall rate", "Suggestion box"])
    for row in rows:
        # do your stuff
        csvWriter.writerow(row)

    conn.close()

def check_assignment(assignment_no_):
    conn=sqlite3.connect("lite.db")
    cur=conn.cursor()
    control_assignment = cur.execute("SELECT * FROM gi_store WHERE assignment_no_ = ?", (assignment_no_,))
    control_assignment_row=cur.fetchone()
    conn.close()
    return control_assignment_row

connect()

#print(check_assignment(assignment_no_text="2"))

1 Ответ

1 голос
/ 24 января 2020

Ваши функции check_assignment() возвращает строку с номером присваивания или None, но вы сравниваете с 0. Вы должны сравнить с None

 if check_assignment(assignment_no_text.get()) is None:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...