from tkinter import *
from tkinter import ttk
+from datetime import datetime
+from tkinter.messagebox import showinfo
import re, db, pa_com
"""
csTypeLabel=ttk.Label(csFrame, text=csCLValue.get())
csTypeLabel.grid(column=2, row=0, padx=5)
"""
-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 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')
+ tree.heading('logger', text="Logujący:")
+ tree.column('logger', minwidth=0, width=75, stretch=NO)
+ tree.heading('sign', text="Znak:")
+ tree.column('sign', minwidth=0, width=60, stretch=NO)
+ tree.heading('name', text="Nazwa:")
+ tree.column('name', minwidth=0, width=100, stretch=NO)
+ tree.heading('rst', text="Raport:")
+ tree.column('rst', minwidth=0, width=60, stretch=NO)
+ tree.heading('dt', text="Data/Czas:")
+ tree.column('dt', minwidth=0, width=130, stretch=NO)
+ tree.heading('eq', text="Radio:")
+ tree.column('eq', minwidth=0, width=65, stretch=NO)
+ tree.heading('ch', text="Kanał:")
+ tree.column('ch', minwidth=0, width=65, stretch=NO)
+ logsRes=db.checkData(logger, db.isSignOrName(logger), 'logs')
+ for row in logsRes:
+ tree.insert('', END, values=row)
+ tree.grid(column=0, row=0, sticky="nsew")
+ scrollbar = ttk.Scrollbar(logs, orient=VERTICAL, command=tree.yview)
+ scrollbar.grid(column=1, row=0, sticky="ns")
+ root.wait_window(logs)
def fillLoggerData(sign, name, lat, lon):
loggerSignEntry.insert(0, sign)
if not pacomTest == None:
loadLoggerInfo()
else:
- alertWindow('Nie pobrano danych z planawaryjny.com')
+ showwarning(title='Mike Lima', message='Nie pobrano danych z planawaryjny.com')
+ #alertWindow('Nie pobrano danych z planawaryjny.com')
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.\nZostaną załadowane dane ze strony planawaryjny.com, co może chwilę potrwać.')
+ showinfo(title="Mike Lima", message='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.updateLoggerData(phrase, pacom[0], pacom[1], pacom[2], pacom[3])
fillLoggerData(pacom[0], pacom[1], pacom[2], pacom[3])
else:
- alertWindow('Nie znaleziono podanej frazy\nw bazie planawaryjny.com')
+ showwarning(title="Mike Lima", message='Nie znaleziono podanej frazy\nw bazie planawaryjny.com')
fillDbWithNewLoggerData(phrase)
else:
if db.isDatabaseExist():
else:
fillDbWithNewLoggerData(phrase)
else:
- alertWindow('Baza danych nie istnieje!\nZostanie utworzona nowa.')
+ showinfo(title="Mike Lima", message='Baza danych nie istnieje!\nZostanie utworzona nowa.')
db.dbNotFound()
fillDbWithNewLoggerData(phrase)
logger=db.checkData(phrase, db.isSignOrName(phrase), 'logger')
if not logger == None:
db.updateLoggerData(phrase, sign, name, lat, lon)
- alertWindow('Dane zostały zmienione')
+ showinfo(title="Mike Lima", message='Dane zostały zmienione')
def loggerEqHandler(arg1):
loggerChLabel.grid(column=2, row=2, padx=5, pady=5)
loggerChCombo.grid(column=3, row=2, padx=5, pady=5)
+def fillLoggingData(logger, sign, name, rst, dt, radio, ch):
+ loginLoggerEntry.insert(0, logger)
+ loginDtEntry.insert(0, dt)
+ loginSignEntry.insert(0, sign)
+ loginNameEntry.insert(0, name)
+ loginRstEntry.insert(0, rst)
+ loginEqEntry.insert(0, radio)
+ loginChEntry.insert(0, ch)
+
def searchInfo():
- pass
-
+ phrase=searchQuery.get()
+ pacom=db.checkData(phrase, db.isSignOrName(phrase), 'pacom')
+ logger = loggerSign.get()
+ radio = loggerEq.get()
+ channel = loggerCh.get()
+ now = datetime.now()
+
+ if not pacom == None:
+ fillLoggingData(logger, pacom[0], pacom[1], 0, now, radio, channel)
+ else:
+ logged=db.checkData(phrase, db.isSignOrName(phrase), 'logs')
+ if not logged == None:
+ fillLogginData(logged[0], logged[1], logged[2], 0, now, radio, channel)
+ else:
+ if db.isSignOrName(phrase):
+ fillLoggingData(logger, phrase, 'None', 0, now, radio, channel)
+ else:
+ fillLoggingData(logger, 0, phrase, 0, now, radio, channel)
+
+def cleanLoginSection():
+ searchEntry.delete(0, END)
+ loginLoggerEntry.delete(0, END)
+ loginDtEntry.delete(0, END)
+ loginSignEntry.delete(0, END)
+ loginNameEntry.delete(0, END)
+ loginRstEntry.delete(0, END)
+ loginEqEntry.delete(0, END)
+ loginChEntry.delete(0, END)
+
+def cleanLoggerSection():
+ csValueEntry.delete(0, END)
+ checkPA_com.set('0')
+ loggerSignEntry.delete(0, END)
+ loggerNameEntry.delete(0, END)
+ loggerLatEntry.delete(0, END)
+ loggerLonEntry.delete(0, END)
+
+def saveLogs():
+ logger=loginLogger.get()
+ sign=loginSign.get()
+ name=loginName.get()
+ rst=loginRst.get()
+ dt=loginDt.get()
+ radio=loginEq.get()
+ channel=loginCh.get()
+
+ db.saveLog(logger, sign, name, rst, dt, radio, channel)
+ showinfo(title='Mike Lima', message='Łączność zapisana.')
+
+
root = Tk()
root.title('Mike Lima')
icon = PhotoImage(file="ml-windowicon.png")
root.geometry('640x480')
content=ttk.Frame(root)
-alert=""
#Frame: Imie/Znak
csFrame=ttk.LabelFrame(content, text="Imię/(161)ML:", borderwidth=1, relief='groove', width=640, height=32)
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)
+csCheckPAChkbox=ttk.Checkbutton(csFrame, text="Pobierz dane z planawaryjny.com", variable=checkPA_com, onvalue='1', offvalue='0')
csImage.grid(column=1, row=0, padx=10)
csValueEntry.grid(column=3, row=0, padx=10)
loggerSignLabel=ttk.Label(loggerFrame, text="Znak: ")
loggerSignEntry=ttk.Entry(loggerFrame, textvariable=loggerSign)
loggerNameLabel=ttk.Label(loggerFrame, text="Nazwa: ")
+loggerLogsButton=ttk.Button(loggerFrame, text="Pokaż logi", command=logsWindow)
loggerNameEntry=ttk.Entry(loggerFrame, textvariable=loggerName)
loggerLatLabel=ttk.Label(loggerFrame, text="Lat: ")
loggerLatEntry=ttk.Entry(loggerFrame, textvariable=loggerLat)
loggerEqLabel=ttk.Label(loggerFrame, text="Radio: ")
loggerEqCombo=ttk.Combobox(loggerFrame, textvariable=loggerEq, values=('CB', 'PMR'))
loggerEqCombo.bind('<<ComboboxSelected>>', loggerEqHandler);
+loggerCleanButton=ttk.Button(loggerFrame, text="Wyczyść", command=cleanLoggerSection)
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)
+loggerCleanButton.grid(column=4, 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)
loggerEqLabel.grid(column=0, row=2, padx=5, pady=5)
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: ")
searchEntry=ttk.Entry(searchFrame, textvariable=searchQuery)
searchButton=ttk.Button(searchFrame, text="Szukaj", command=searchInfo)
+cleanButton=ttk.Button(searchFrame, text="Wyczyść", command=cleanLoginSection)
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)
+cleanButton.grid(column=3, row=0, padx=5, pady=5)
+
+#Frame: Zaloguj
+loginFrame=ttk.LabelFrame(content, text="Zaloguj: ", borderwidth=1, relief='groove', width=640)
+loginLogger=StringVar()
+loginSign=StringVar()
+loginName=StringVar()
+loginRst=StringVar()
+loginDt=StringVar()
+loginEq=StringVar()
+loginCh=StringVar()
+
+loginLoggerLabel=ttk.Label(loginFrame, text="Logujący: ")
+loginLoggerEntry=ttk.Entry(loginFrame, textvariable=loginLogger)
+loginSignLabel=ttk.Label(loginFrame, text="Znak: ")
+loginSignEntry=ttk.Entry(loginFrame, textvariable=loginSign)
+loginNameLabel=ttk.Label(loginFrame, text="Nazwa: ")
+loginNameEntry=ttk.Entry(loginFrame, textvariable=loginName)
+loginRstLabel=ttk.Label(loginFrame, text="RST: ")
+loginRstEntry=ttk.Entry(loginFrame, textvariable=loginRst, width=10)
+loginDtLabel=ttk.Label(loginFrame, text="Data/Czas: ")
+loginDtEntry=ttk.Entry(loginFrame, textvariable=loginDt)
+loginEqLabel=ttk.Label(loginFrame, text="Radio: ")
+loginEqEntry=ttk.Entry(loginFrame, textvariable=loginEq, width=10)
+loginChLabel=ttk.Label(loginFrame, text="Kanał: ")
+loginChEntry=ttk.Entry(loginFrame, textvariable=loginCh, width=10)
+loginButton=ttk.Button(loginFrame, text="Zaloguj", command=saveLogs)
+
+loginLoggerLabel.grid(column=0, row=0, padx=5, pady=5)
+loginLoggerEntry.grid(column=1, row=0, padx=5, pady=5)
+loginDtLabel.grid(column=2, row=0, padx=5, pady=5)
+loginDtEntry.grid(column=3, row=0, padx=5, pady=5)
+loginSignLabel.grid(column=0, row=1, padx=5, pady=5)
+loginSignEntry.grid(column=1, row=1, padx=5, pady=5)
+loginNameLabel.grid(column=2, row=1, padx=5, pady=5)
+loginNameEntry.grid(column=3, row=1, padx=5, pady=5)
+loginRstLabel.grid(column=0, row=3, padx=5, pady=5)
+loginRstEntry.grid(column=1, row=3, padx=5, pady=5)
+loginEqLabel.grid(column=0, row=2, padx=5, pady=5)
+loginEqEntry.grid(column=1, row=2, padx=5, pady=5)
+loginChLabel.grid(column=2, row=2, padx=5, pady=5)
+loginChEntry.grid(column=3, row=2, padx=5, pady=5)
+loginButton.grid(column=3, row=3, padx=5, pady=5)
+
#Frame image: https://www.flaticon.com/free-icon/emergency-sign_2061966?term=emergency+sign&related_id=2061966
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")
+loginFrame.grid(column=0, row=3, padx=15, sticky="ew")
root.columnconfigure(1, weight=1)
root.rowconfigure(1, weight=1)