From 2cbf2f67e636c059e5e05d4c1c903bf7c2c62d4c Mon Sep 17 00:00:00 2001 From: xf0r3m Date: Fri, 24 May 2024 14:38:09 +0200 Subject: [PATCH] =?utf8?q?Przeprowadzenie=20do=20ko=C5=84ca=20test=C3=B3w?= =?utf8?q?=20funkcji=20bazodanowych.=20Uzupe=C5=82nienie=20layout=20aplika?= =?utf8?q?cji=20o=20dane=20loguj=C4=85cego=20oraz=20o=20widget=20wyszukiwa?= =?utf8?q?nia.=20Rozpocz=C4=99to=20obs=C5=82ug=C4=99=20widget=C3=B3w=20wra?= =?utf8?q?z=20z=20funkcjami=20bazodanymowymi.=20Zako=C5=84czono=20prac?= =?utf8?q?=C4=99=20na=20sprawdzeniu=20podanego=20imienia=20b=C4=85d=C5=BA?= =?utf8?q?=20znaku=20w=20danych=20PA.com=20i=20ustawienie=20ich=20jako=20d?= =?utf8?q?anych=20loguj=C4=85cego.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- db.py | 21 ++++--- pa_com.py | 4 +- test_db.py | 7 ++- window.py | 181 +++++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 174 insertions(+), 39 deletions(-) diff --git a/db.py b/db.py index 3b3ad98..8508a53 100755 --- a/db.py +++ b/db.py @@ -17,25 +17,26 @@ def dbNotFound(): cur.execute("CREATE TABLE logger(sign,name,lat,lon)") cur.execute("CREATE TABLE pacom(sign,name,lat,lon)") #rst = raport, dt=czas/data, eq=PMR/CB, ch=2/12(PMR),11/13(CB) - cur.execute("CREATE TABLE logs(sign,name,rst,dt,eq,ch)") + cur.execute("CREATE TABLE logs(logger,sign,name,rst,dt,eq,ch)") con.close() def loadDataFromPAcom(pacomList): con = sqlite3.connect("ml-logs.db") cur = con.cursor() - cur.executemany("INSERT INTO pacom VALUES(?, ?, ?)", pacomList) + cur.executemany("INSERT INTO pacom VALUES(?, ?, ?, ?)", pacomList) con.commit() con.close() -def checkLoggerData(loggerData, ldType): +def checkData(phrase, pType, sqlTable): con = sqlite3.connect("ml-logs.db") cur = con.cursor() - if ldType: - res = cur.execute(f"SELECT * FROM logger WHERE sign = {loggerData}") + if pType: + res = cur.execute(f"SELECT * FROM {sqlTable} WHERE sign = '{phrase}'") else: - res = cur.execute(f"SELECT * FROM logger WHERE name = '{loggerData}'") + res = cur.execute(f"SELECT * FROM {sqlTable} WHERE name = '{phrase}'") result = res.fetchone() - print(result) + #print(result) + return result con.close() def isSignOrName(phrase): @@ -49,7 +50,7 @@ def saveLoggerData(phrase): con = sqlite3.connect('ml-logs.db') cur = con.cursor() if isSignOrName(phrase): - cur.execute(f"INSERT INTO logger VALUES ({phrase},'None',0.0,0.0)") + cur.execute(f"INSERT INTO logger VALUES ('{phrase}','None',0.0,0.0)") else: cur.execute(f"INSERT INTO logger VALUES (0,'{phrase}',0.0,0.0)") con.commit() @@ -59,8 +60,8 @@ def updateLoggerData(phrase,sign,name,lat,lon): con = sqlite3.connect('ml-logs.db') cur = con.cursor() if isSignOrName(phrase): - cur.execute(f"UPDATE logger SET sign = {sign}, name = '{name}', lat = {lat}, lon = {lon} WHERE sign = {phrase}") + cur.execute(f"UPDATE logger SET sign = '{sign}', name = '{name}', lat = {lat}, lon = {lon} WHERE sign = '{phrase}'") else: - cur.execute(f"UPDATE logger SET sign = {sign}, name = '{name}', lat = {lat}, lon = {lon} WHERE name = '{phrase}'") + cur.execute(f"UPDATE logger SET sign = '{sign}', name = '{name}', lat = {lat}, lon = {lon} WHERE name = '{phrase}'") con.commit() con.close() diff --git a/pa_com.py b/pa_com.py index 4192724..ab72071 100755 --- a/pa_com.py +++ b/pa_com.py @@ -37,6 +37,6 @@ def getDataFromPAcom(paComList): #print(f"Znak: {cs}\t Nazwa: {name}\t GPS: {gpsCords}") #return paComList -pCL=[] -getDataFromPAcom(pCL) +#pCL=[] +#getDataFromPAcom(pCL) #print(pCL) diff --git a/test_db.py b/test_db.py index 34dbb59..07645e4 100755 --- a/test_db.py +++ b/test_db.py @@ -1,11 +1,16 @@ #!/usr/bin/env python3 import db +import pa_com p = '2137' if db.isDatabaseExist(): - db.checkLoggerData(p, db.isSignOrName(p)) + #pCL=[] + #pa_com.getDataFromPAcom(pCL) + #db.loadDataFromPAcom(pCL) + #db.saveLoggerData(p) + db.checkData(p, db.isSignOrName(p), 'logger') #db.updateLoggerData(p, 2137, 'JuanPabloSec', 50.24, 21.49) else: db.dbNotFound() diff --git a/window.py b/window.py index f0bac56..c2eedb8 100755 --- a/window.py +++ b/window.py @@ -4,7 +4,7 @@ from tkinter import * from tkinter import ttk -import re +import re, db, pa_com """ def csCHandler(arg1): @@ -21,25 +21,163 @@ def csCHandler(arg1): csTypeLabel=ttk.Label(csFrame, text=csCLValue.get()) csTypeLabel.grid(column=2, row=0, padx=5) """ -def findInfoAbout(): +def alertWindow(msg): + alert = Toplevel(root) + alert.title('Mike Lima') + #icon = PhotoImage(file="ml-windowicon.png") + #alert.call('wm','iconphoto', alert._w, icon) + alert.geometry('200x150') + mainFrame=ttk.Frame(alert) + alertMsg=ttk.Label(mainFrame, text=msg, justify="center", wraplength=195) + alertBtn=ttk.Button(mainFrame, text="OK", command=alert.destroy, width=4) + mainFrame.grid(column=0, row=0) + alertMsg.grid(column=0, row=0, padx=5, pady=5, sticky="ew") + alertBtn.grid(column=0, row=1, padx=5, pady=5, sticky="ew") + alert.columnconfigure(1, weight=1) + alert.rowconfigure(1, weight=1) + root.wait_window(alert) + +def fillLoggerData(sign, name, lat, lon): + loggerSignEntry.insert(0, sign) + loggerNameEntry.insert(0, name) + loggerLatEntry.insert(0, lat) + loggerLonEntry.insert(0, lon) + +def fillDbWithNewLoggerData(phrase): + db.saveLoggerData(phrase) + logger=db.checkData(phrase, db.isSignOrName(phrase), 'logger') + fillLoggerData(logger[0], logger[1], logger[2], logger[3]) + +def loadLoggerInfo(): phrase=csValue.get() - PA_comFlag=checkPA_com.get() - prog = re.compile('^\d*$'); - if not prog.match(phrase) == None: - print("Sign"); + checkPA=checkPA_com.get() + print(checkPA) + if checkPA == '1': + if db.isDatabaseExist(): + pass + else: + alertWindow('Baza danych nie istnieje!\nZostanie utworzona nowa.\nZostaną załadowane dane ze strony planawaryjny.com, co może chwilę potrwać.') + db.dbNotFound() + pCL=[] + pa_com.getDataFromPAcom(pCL) + db.loadDataFromPAcom(pCL) + db.saveLoggerData(phrase) + pacom=db.checkData(phrase, db.isSignOrName(phrase), 'pacom') + db.updateLoggerData(phrase, pacom[0], pacom[1], pacom[2], pacom[3]) + fillLoggerData(pacom[0], pacom[1], pacom[2], pacom[3]) + else: + if db.isDatabaseExist(): + logger=db.checkData(phrase, db.isSignOrName(phrase), 'logger') + if not logger == None: + fillLoggerData(logger[0], logger[1], logger[2], logger[3]) + else: + fillDbWithNewLoggerData(phrase) + else: + alertWindow('Baza danych nie istnieje!\nZostanie utworzona nowa.') + db.dbNotFound() + fillDbWithNewLoggerData(phrase) + + +def saveLoggerInfo(): + phrase = loggerSign.get() + sign = phrase + name = loggerName.get() + lat = loggerLat.get() + lon = loggerLon.get() + logger=db.checkData(phrase, db.isSignOrName(phrase), 'logger') + if not logger == None: + db.updateLoggerData(phrase, sign, name, lat, lon) + alertWindow('Dane zostały zmienione') + + +def loggerEqHandler(arg1): + radio=loggerEq.get() + loggerChLabel=ttk.Label(loggerFrame, text="Kanał: ") + if radio == 'CB': + loggerChCombo=ttk.Combobox(loggerFrame, textvariable=loggerCh, value=('(AM) 11', '(SSB) 13)')) else: - print("Name"); - print(phrase) - print(PA_comFlag) + loggerChCombo=ttk.Combobox(loggerFrame, textvariable=loggerCh, value=('2', '12')) + + loggerChLabel.grid(column=2, row=2, padx=5, pady=5) + loggerChCombo.grid(column=3, row=2, padx=5, pady=5) +def searchInfo(): + pass + root = Tk() root.title('Mike Lima') icon = PhotoImage(file="ml-windowicon.png") -root.call('wm','iconphoto', root._w, icon) +root.iconphoto(True, icon) +#root.call('wm','iconphoto', root._w, icon) root.geometry('640x480') content=ttk.Frame(root) -csFrame=ttk.Frame(content, width=600, height=32) +alert="" + +#Frame: Imie/Znak +csFrame=ttk.LabelFrame(content, text="Imię/(161)ML:", borderwidth=1, relief='groove', width=640, height=32) +csValue=StringVar() +checkPA_com=StringVar() + +csLogo=PhotoImage(file="ml-sign-32x32.png") +csImage=ttk.Label(csFrame, image=csLogo) +csValueEntry=ttk.Entry(csFrame, textvariable=csValue) +csLoadButton=ttk.Button(csFrame, text="Załaduj", command=loadLoggerInfo) +csCheckPAChkbox=ttk.Checkbutton(csFrame, text="Pobierz dane z planawaryjny.com", variable=checkPA_com) + +csImage.grid(column=1, row=0, padx=10) +csValueEntry.grid(column=3, row=0, padx=10) +csCheckPAChkbox.grid(column=5, row=0, padx=10) +csLoadButton.grid(column=6, row=0, padx=10) + +#Frame: Logujący +loggerFrame=ttk.LabelFrame(content, text="Logujący:", borderwidth=1, relief='groove', width=640, height=96) +loggerSign=StringVar() +loggerName=StringVar() +loggerLat=StringVar() +loggerLon=StringVar() +loggerEq=StringVar() +loggerCh=StringVar() + +loggerSignLabel=ttk.Label(loggerFrame, text="Znak: ") +loggerSignEntry=ttk.Entry(loggerFrame, textvariable=loggerSign) +loggerNameLabel=ttk.Label(loggerFrame, text="Nazwa: ") +loggerNameEntry=ttk.Entry(loggerFrame, textvariable=loggerName) +loggerLatLabel=ttk.Label(loggerFrame, text="Lat: ") +loggerLatEntry=ttk.Entry(loggerFrame, textvariable=loggerLat) +loggerLonLabel=ttk.Label(loggerFrame, text="Lon: ") +loggerLonEntry=ttk.Entry(loggerFrame, textvariable=loggerLon) +loggerSaveButton=ttk.Button(loggerFrame, text="Zapisz", command=saveLoggerInfo) +loggerEqLabel=ttk.Label(loggerFrame, text="Radio: ") +loggerEqCombo=ttk.Combobox(loggerFrame, textvariable=loggerEq, values=('CB', 'PMR')) +loggerEqCombo.bind('<>', loggerEqHandler); + +loggerSignLabel.grid(column=0, row=0, padx=5, pady=5) +loggerSignEntry.grid(column=1, row=0, padx=5, pady=5) +loggerNameLabel.grid(column=2, row=0, padx=5, pady=5) +loggerNameEntry.grid(column=3, row=0, padx=5, pady=5) + +loggerLatLabel.grid(column=0, row=1, padx=5, pady=5) +loggerLatEntry.grid(column=1, row=1, padx=5, pady=5) +loggerLonLabel.grid(column=2, row=1, padx=5, pady=5) +loggerLonEntry.grid(column=3, row=1, padx=5, pady=5) +loggerSaveButton.grid(column=4, row=1, padx=5, pady=5) + +loggerEqLabel.grid(column=0, row=2, padx=5, pady=5) +loggerEqCombo.grid(column=1, row=2, padx=5, pady=5) + +#Frame: Szukaj +searchFrame=ttk.LabelFrame(content, text="Szukaj:", borderwidth=1, relief='groove', width=640, height=32) +searchQuery=StringVar() + +searchEntryLabel=ttk.Label(searchFrame, text="Imię/(161)ML: ") +searchEntry=ttk.Entry(searchFrame, textvariable=searchQuery) +searchButton=ttk.Button(searchFrame, text="Szukaj", command=searchInfo) + +searchEntryLabel.grid(column=0, row=0, padx=5, pady=5) +searchEntry.grid(column=1, row=0, padx=5, pady=5) +searchButton.grid(column=2, row=0, padx=5, pady=5) + #Frame image: https://www.flaticon.com/free-icon/emergency-sign_2061966?term=emergency+sign&related_id=2061966 #csType=StringVar() @@ -47,21 +185,12 @@ csFrame=ttk.Frame(content, width=600, height=32) #csC.bind('<>', csCHandler) #csValue=StringVar() -csLogo=PhotoImage(file="ml-sign-32x32.png") -csImage=ttk.Label(csFrame, image=csLogo) -csLabel=ttk.Label(csFrame, text="Imię/(161)ML:") -csValue=StringVar() -csValueEntry=ttk.Entry(csFrame, textvariable=csValue) -csLoadButton=ttk.Button(csFrame, text="Załaduj", command=findInfoAbout) -checkPA_com=StringVar() -csCheckPAChkbox=ttk.Checkbutton(csFrame, text="Pobierz z planawaryjny.com", variable=checkPA_com) - content.grid(column=0, row=0) -csFrame.grid(column=0, row=0, padx=5, pady=5) -csImage.grid(column=0, row=0, padx=5) -csLabel.grid(column=1, row=0, padx=5) -csValueEntry.grid(column=2, row=0, padx=5) -csCheckPAChkbox.grid(column=3, row=0, padx=5) -csLoadButton.grid(column=4, row=0, padx=5) +csFrame.grid(column=0, row=0, padx=15, sticky="ew") +loggerFrame.grid(column=0, row=1, padx=15, sticky="ew") +searchFrame.grid(column=0, row=2, padx=15, sticky="ew") + +root.columnconfigure(1, weight=1) +root.rowconfigure(1, weight=1) root.mainloop() -- 2.39.5