From: xf0r3m Date: Sun, 26 May 2024 11:20:31 +0000 (+0200) Subject: Zakończono rozwój core-owych funkcji. X-Git-Url: https://gitweb.morketsmerke.org/?a=commitdiff_plain;p=ML.git Zakończono rozwój core-owych funkcji. --- diff --git a/db.py b/db.py index d6ce15f..08ac4f6 100755 --- a/db.py +++ b/db.py @@ -31,7 +31,7 @@ def checkData(phrase, pType, sqlTable): con = sqlite3.connect("ml-logs.db") cur = con.cursor() if sqlTable == 'logs': - res = cur.execute(f"SELECT * FROM logs WHERE logger = '{phrase}'") + res = cur.execute(f"SELECT ROWID, * FROM logs WHERE logger = '{phrase}'") result = res else: if pType: @@ -76,3 +76,17 @@ def saveLog(logger, sign, name, rst, dt, eq, ch): cur.execute(f"INSERT INTO logs VALUES ('{logger}', '{sign}', '{name}', '{rst}', '{dt}', '{eq}', '{ch}')") con.commit() con.close() + +def editLog(rowid, logger, sign, name, rst, dt, eq, ch): + con = sqlite3.connect('ml-logs.db') + cur = con.cursor() + cur.execute(f"UPDATE logs SET logger = '{logger}', sign = '{sign}', name = '{name}', rst = '{rst}', dt = '{dt}', eq = '{eq}', ch = '{ch}' WHERE ROWID = {rowid}") + con.commit() + con.close() + +def deleteLog(rowid): + con = sqlite3.connect('ml-logs.db') + cur = con.cursor() + cur.execute(f"DELETE FROM logs WHERE ROWID = {rowid}") + con.commit() + con.close() diff --git a/window.py b/window.py index 5aa8ebf..17fbf7c 100755 --- a/window.py +++ b/window.py @@ -5,31 +5,22 @@ from tkinter import * from tkinter import ttk from datetime import datetime -from tkinter.messagebox import showinfo +from tkinter.messagebox import showinfo, askyesno import re, db, pa_com -""" -def csCHandler(arg1): - csCValue=csType.get() - csCLValue=StringVar() - if ( csCValue == 'Imię' ): - csCLValue.set('Imię:') - else: - csCLValue.set('(161)ML') - - if 'csTypeLabel' in locals(): - csTypeLabel.destroy(); - - csTypeLabel=ttk.Label(csFrame, text=csCLValue.get()) - csTypeLabel.grid(column=2, row=0, padx=5) - """ def logsWindow(): logger=csValue.get() logs = Toplevel(root) logs.title('Mike Lima - Logi') - logs.geometry('640x240') - columns = ('logger', 'sign', 'name', 'rst', 'dt', 'eq', 'ch') - tree = ttk.Treeview(logs, columns=columns, show='headings') + logs.geometry('640x255') + tvFrame=ttk.Frame(logs, width=640, height=200) + + #Wykorzystanie ttk.Treeview + #https://www.pythontutorial.net/tkinter/tkinter-treeview/ + columns = ('lp', 'logger', 'sign', 'name', 'rst', 'dt', 'eq', 'ch') + tree = ttk.Treeview(tvFrame, columns=columns, show='headings') + tree.heading('lp', text='Lp.') + tree.column('lp', minwidth=0, width=40, stretch=NO) tree.heading('logger', text="Logujący:") tree.column('logger', minwidth=0, width=75, stretch=NO) tree.heading('sign', text="Znak:") @@ -47,9 +38,62 @@ def logsWindow(): logsRes=db.checkData(logger, db.isSignOrName(logger), 'logs') for row in logsRes: tree.insert('', END, values=row) + + record="" + def logSelected(event): + item=tree.item(tree.selection()) + nonlocal record + record=item['values'] + if len(record) > 0: + logRowId.set(record[0]) + + def editLog(): + cleanLoginSection() + loginLoggerEntry.insert(0, record[1]) + loginSignEntry.insert(0, record[2]) + loginNameEntry.insert(0, record[3]) + loginRstEntry.insert(0, record[4]) + loginDtEntry.insert(0, record[5]) + loginEqEntry.insert(0, record[6]) + loginChEntry.insert(0, record[7]) + #Zmiana atrybutów wyświetlonych już widgetów: + #https://stackoverflow.com/questions/3998742/how-can-i-dynamically-change-the-color-of-a-button-in-tkinter + loginButton.configure(text="Zapisz", command=saveEditLogs) + loginFrame.configure(text="Edytuj:") + logs.destroy() + + def deleteLog(): + if askyesno(title="Mike Lima", message=f"Usunąć łączność do {record[3]} z {record[5]}?"): + rowid = logRowId.get() + db.deleteLog(rowid) + #Wyczyszcenie treeview przed pobraniem danych na nowo: + #https://stackoverflow.com/questions/22812134/how-to-clear-an-entire-treeview-with-tkinter + tree.delete(*tree.get_children()) + logsRes=db.checkData(logger, db.isSignOrName(logger), 'logs') + for row in logsRes: + tree.insert('', END, values=row) + #Przywrócenie okna logów po zatwierdzeniu usunięcia wpisu: + #https://stackoverflow.com/questions/22751100/tkinter-main-window-focus + logs.focus_force() + logs.lift() + root.update() + #logs.destroy() + + + tree.bind('<>', logSelected) + + tvFrame.grid(column=0, row=0) tree.grid(column=0, row=0, sticky="nsew") - scrollbar = ttk.Scrollbar(logs, orient=VERTICAL, command=tree.yview) + scrollbar = ttk.Scrollbar(tvFrame, orient=VERTICAL, command=tree.yview) scrollbar.grid(column=1, row=0, sticky="ns") + + buttonFrame=ttk.Frame(logs, width=640, height=32) + editButton=ttk.Button(buttonFrame, text="Edytuj", command=editLog) + editButton.grid(column=0, row=0, padx=5, pady=5) + deleteButton=ttk.Button(buttonFrame, text="Usuń", command=deleteLog) + deleteButton.grid(column=1, row=0, padx=5, pady=5) + buttonFrame.grid(column=0, row=1, sticky="w") + root.wait_window(logs) def fillLoggerData(sign, name, lat, lon): @@ -183,6 +227,8 @@ def cleanLoginSection(): loginRstEntry.delete(0, END) loginEqEntry.delete(0, END) loginChEntry.delete(0, END) + loginButton.configure(text="Zaloguj", command=saveLogs) + loginFrame.configure(text="Zaloguj:") def cleanLoggerSection(): csValueEntry.delete(0, END) @@ -204,6 +250,18 @@ def saveLogs(): db.saveLog(logger, sign, name, rst, dt, radio, channel) showinfo(title='Mike Lima', message='Łączność zapisana.') +def saveEditLogs(): + rowid=logRowId.get() + logger=loginLogger.get() + sign=loginSign.get() + name=loginName.get() + rst=loginRst.get() + dt=loginDt.get() + eq=loginEq.get() + ch=loginCh.get() + db.editLog(rowid, logger, sign, name, rst, dt, eq, ch) + showinfo(title='Mike Lima', message='Zmiany zostały zapisane.') + root = Tk() root.title('Mike Lima') @@ -271,7 +329,7 @@ loggerEqCombo.grid(column=1, row=2, padx=5, pady=5) loggerLogsButton.grid(column=4, row=2, padx=5, pady=5) #Frame: Szukaj -searchFrame=ttk.LabelFrame(content, text="Szukaj: ", borderwidth=1, relief='groove', width=640, height=32) +searchFrame=ttk.LabelFrame(content, text="Szukaj:", borderwidth=1, relief='groove', width=640, height=32) searchQuery=StringVar() searchEntryLabel=ttk.Label(searchFrame, text="Imię/(161)ML: ") @@ -293,6 +351,7 @@ loginRst=StringVar() loginDt=StringVar() loginEq=StringVar() loginCh=StringVar() +logRowId=IntVar() loginLoggerLabel=ttk.Label(loginFrame, text="Logujący: ") loginLoggerEntry=ttk.Entry(loginFrame, textvariable=loginLogger)