Временные метки, отображаемые в графическом интерфейсе программы Python, не обновляются? - PullRequest
1 голос
/ 10 октября 2019

Хорошо, поэтому я недавно написал программу для punchclock, основанную на python, для моей компании, которая заменила их старую систему перфокарт на бумаге и штампах. Идея состоит в том, что у каждого есть доступ к карточкам-ключам, чтобы входить утром в двери, поэтому мы используем RFID-считыватель, подключенный к Surface Pro прямо внутри двери, чтобы следить за происходящим. Считыватель запрограммирован так, что он прочитает карту и выдаст событие «ВОЗВРАТ». Когда он попадает, он запускает только что введенные числа (EmpID) для таблицы SQLite (Emps), которая возвращает соответствующее имя (EmpName). Затем EmpName используется в качестве входных данных для другой таблицы (Swipes) вместе с theDate и theTime. Значения EmpName и theTime также отображаются в тексте под полем ввода с помощью команды .Update(). Это .. в основном работает. Он будет поменять имена, когда разные карты будут загружены через ридер, но это не изменит время. Когда я проверяю БД с помощью SQLiteStudio, мои записи сделаны, но все они имеют одинаковую метку времени. Вот фрагмент кода внешнего интерфейса:

import pysimplegui as sg
import datetime
import TimeclockBackEnd as be

layout = [[sg.Text('Swipe Your Card')],
          [sg.InputText(size=(6,1), key='IN', focus=True)],
          [sg.Text('', key='theName', size=(45,1))],
          [sg.Text('', key='theTime', size=(45,1))],
          [sg.Button('', key='RETURN', visible=False, bind_return_key=True)],

window = sg.Window('Clock!', layout)
rightNow = datetime.datetime.now()
theTime = rightNow.strftime("%H:%M:%S")
theDate = rightNow.strftime("%Y-%m-%d")

while True :
    event, value = window.Read()
    cardNumber = value['IN']
    if event is None:
        break 
    elif event is 'RETURN':
        nameOfSwiper = be.Swipe(cardNumber)
        be.submitToDB(nameOfSwiper, theDate, theTime)
        window['theName'].Update(nameOfSwiper)
        window['theTime'].Update(theTime)
        window['IN'].Update('')

и вот код, который он вызывает в бэкэнде (be):

def Swipe(EmpID):
    con = sqlite3.connect('Timeclock.db')
    cur = con.cursor()
    cur.execute("SELECT EmpName FROM Emps WHERE EmpID=?", (EmpID,))
    returnedValue = cur.fetchall()
    con.commit()
    con.close()
    delisted = ''.join(map(str, returnedValue))
    stripped = str(delisted).strip('()')
    strippedAgain = str(stripped).strip(',')
    swiperName = str(strippedAgain).strip("''")
    return swiperName
def submitToDB(EmpName, theDate, theTime):
    con = sqlite3.connect('Timeclock.db')
    cur = con.cursor()
    cur.execute("INSERT INTO Swipes VALUES (?, ?, ?)", (EmpName, theDate, theTime))
    con.commit()
    con.close()

Опять, он пишет в БД простохорошо, единственная проблема, с которой я сталкиваюсь, это то, что theTime не отличается от значения, которое было установлено при его первоначальном пролистыванииЭто основные рабочие части кода, но если вы не видите здесь ничего плохого, не стесняйтесь проверить мой github , у меня есть все. Спасибо за помощь!

...