Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import ttk
- import locale
- import qrcode
- from PIL import Image, ImageTk
- import tkinter.simpledialog
- import tkinter.messagebox
- locale.setlocale(locale.LC_ALL, '')
- root = tk.Tk() # Crearea ferestrei principale
- root.title("Analize Medicale") # Setarea titlului ferestrei
- #canvas = tk.Canvas(root) # Crearea canvas-ului în cadrul ferestrei principale
- #canvas.pack(side=tk.LEFT)
- valori_normale = {
- "UREE": (10, 50),
- "CREATININA_F": (0.6, 1.1),
- "CREATININA_B": (0.6, 1.2),
- "ACID_URIC_B": (2.4, 6.0),
- "ACID_URIC_F": (2.4, 6.0),
- "SODIU": (135, 145),
- "POTASIU": (3.5, 5.0),
- "CLORU": (95, 105),
- "Trigliceride": (50, 150),
- "MAGNEZIU": (1.7, 2.2),
- "CALCIU": (0.6, 1.2),
- "FIER_SERIC": (65, 175),
- "GLICEMIE": (70, 110),
- "HEMOGLOBINA": (14, 18),
- "LDH (lactat dehidrogenază)": (10, 190),
- "ACIRD_URIC_BARBATI": (3.5, 7.2),
- "ACIRD_URIC_FEMEI": (2.6, 6.0),
- "ALBUMINA": (3.5, 5.0),
- "AMILAZA": (25, 125),
- "Bilirubina_directa": (0, 0.3),
- "Bilirubina_totala": (0.3, 1.2),
- "LDH_lactat_dehidrogenaza1": (100, 190),
- "LDH_lactat_dehidrogenaza2": (100, 190),
- "HEMOGLOBINA_BARBATI": (14, 18),
- "HEMOGLOBINA_FEMEI": (14, 16),
- "TROMBOCITE": (150000, 450000),
- "COLESTEROL": (150000, 450000),
- "FIBRIOGEN1": (200, 400),
- "FIBRIOGEN2": (200, 400),
- "AST": (10, 20),
- "ALT": (7, 40),
- "Bilirubina_totala1": (0.1, 1.2),
- "Urocultura": (0, 100),
- }
- info_medicala = {
- "UREE": {
- "Diagnostic": "Insuficiență renală, deshidratare",
- "Cauze": "Dietă bogată în proteine, deshidratare",
- "Recomandări": "Beți mai multă apă, reduceți aportul de proteine",
- "Uree_crescuta": {
- "Cauze_posibile": [
- "Insuficiență renală acută sau cronică: Rinichii nu pot filtra eficient deșeurile din sânge.",
- "Deshidratare: Volumul scăzut de sânge poate crește concentrația de uree.",
- "O dietă bogată în proteine: Consumul excesiv de proteine poate crește producția de uree.",
- "Hemoragie gastrointestinală: Sângerarea în tractul digestiv poate crește nivelul de uree datorită digestiei sângelui.",
- "Șoc sau stres sever: Poate reduce fluxul sanguin către rinichi.",
- "Obstrucție urinară: Blocajul căilor urinare poate împiedica eliminarea ureei."
- ],
- "Simptome_asociate": ["Letargie", "oboseală", "scăderea apetitului", "greață", "vărsături", "confuzie", "scurtarea respirației"]
- },
- "Uree_scazuta": {
- "Cauze_posibile": [
- "Malnutriție sau o dietă săracă în proteine: Aportul insuficient de proteine reduce producția de uree.",
- "Insuficiență hepatică: Ficatul nu poate produce suficientă uree.",
- "Sarcină: Poate duce la o scădere a nivelului de uree datorită creșterii volumului plasmatic.",
- "Consum excesiv de lichide: Poate dilua concentrația de uree din sânge."
- ],
- "Simptome_asociate": ["Depind de cauza subiacentă", "pierderea în greutate", "slăbiciune", "confuzie", "icter", "Slăbiciune", "Pierderea poftei de mâncare", "Greață", "Vărsături", "Dureri abdominale", "Insuficiență renală"]
- }
- },
- # ... adăugați informații similare pentru celelalte analize
- }
- entries = {}
- # Creează un frame pentru coloanele cu analize
- frame1 = ttk.Frame(root)
- frame2 = ttk.Frame(root)
- frame3 = ttk.Frame(root)
- frame4 = ttk.Frame(root)
- frame1.grid(row=0, column=0, padx=10, pady=10)
- frame2.grid(row=0, column=1, padx=10, pady=10)
- frame3.grid(row=0, column=2, padx=10, pady=10)
- frame4.grid(row=0, column=3, padx=10, pady=10)
- # Adaugă denumirile analizelor în prima coloană (frame1)
- for i, analiza in enumerate(valori_normale.keys()):
- if i < len(valori_normale) // 4:
- label = ttk.Label(frame1, text=analiza)
- label.grid(row=i, column=0, sticky="w")
- # Adaugă input-urile în a doua coloană (frame2)
- for i, analiza in enumerate(valori_normale.keys()):
- if i < len(valori_normale) // 4:
- entry = ttk.Entry(frame2)
- entry.grid(row=i, column=0, padx=5)
- entries[analiza] = entry
- # Adaugă denumirile analizelor în a treia coloană (frame3)
- for i, analiza in enumerate(valori_normale.keys()):
- if len(valori_normale) // 4 <= i < len(valori_normale) // 2:
- label = ttk.Label(frame3, text=analiza)
- label.grid(row=i - len(valori_normale) // 4, column=0, sticky="w")
- # Adaugă input-urile în a patra coloană (frame4)
- for i, analiza in enumerate(valori_normale.keys()):
- if len(valori_normale) // 4 <= i < len(valori_normale) // 2:
- entry = ttk.Entry(frame4)
- entry.grid(row=i - len(valori_normale) // 4, column=0, padx=5)
- entries[analiza] = entry
- # Funcția afiseaza_rezultate va trebui să fie actualizată pentru a verifica valorile introduse și afișa rezultatele corect.
- def afiseaza_rezultate():
- global raport
- global results_text # Folosim variabila globală
- # Crearea variabilei results_window
- results_window = tk.Toplevel(root)
- # Crearea variabilei results_text
- results_text = tk.Text(results_window, wrap=tk.WORD, width=80, height=30)
- raport = ""
- diagnostic = ""
- cauze = ""
- recomandari = ""
- campuri_necompletate = [] # Lista pentru a ține evidența câmpurilor necompletate
- for analiza, entry in entries.items():
- rezultat_text = entry.get().strip()
- if not rezultat_text:
- campuri_necompletate.append(analiza) # Adaugă câmpul necompletat în lista
- else:
- results_text.insert(tk.END, f"{analiza}: ")
- try:
- rezultat_val = float(rezultat_text.replace(" ", ""))
- val_n_min, val_n_max = valori_normale.get(analiza, (None, None))
- if val_n_min is not None and val_n_max is not None:
- if rezultat_val < val_n_min or rezultat_val > val_n_max:
- # Subliniază cu roșu linia cu mesajul de eroare
- results_text.tag_configure("red", foreground="red")
- results_text.insert(tk.END, f"Valoarea nu se încadrează în limitele normale.\n", "red")
- diagnostic = info_medicala.get(analiza, {}).get("Diagnostic", "N/A")
- cauze = info_medicala.get(analiza, {}).get("Cauze", "N/A")
- recomandari = info_medicala.get(analiza, {}).get("Recomandări", "N/A")
- else:
- results_text.insert(tk.END, f"Valoarea se încadrează în limitele normale.\n")
- else:
- results_text.insert(tk.END, "Valoare nevalidă introdusă.\n")
- except ValueError:
- raport += f"{analiza}: Valoare incorectă introdusă.\n"
- # Verificați dacă există câmpuri necompletate
- if campuri_necompletate:
- # Construiți un mesaj cu câmpurile necompletate
- mesaj_campuri_necompletate = "Nu ați completat următoarele câmpuri:\n"
- for camp in campuri_necompletate:
- mesaj_campuri_necompletate += f"- {camp}\n"
- # Afișați mesajul "pop-up" cu opțiunea de a vizualiza analizele sau de a reveni
- raspuns = tkinter.messagebox.askquestion("Câmpuri Necompletate", mesaj_campuri_necompletate + "\nDoriți să vizualizați analizele fără aceste câmpuri?")
- if raspuns == "yes":
- # Afișați analizele fără câmpurile necompletate
- results_text.pack(padx=10, pady=10)
- # Focusează textul în fereastra de rezultate
- results_text.focus_set()
- # Așteaptă ca utilizatorul să închidă fereastra de rezultate
- results_window.wait_window()
- else:
- # Nu există câmpuri necompletate, așa că afișați analizele direct
- results_text.pack(padx=10, pady=10)
- # Focusează textul în fereastra de rezultate
- results_text.focus_set()
- # Așteaptă ca utilizatorul să închidă fereastra de rezultate
- results_window.wait_window()
- # Dacă au fost găsite probleme, afișați un mesaj de eroare
- if raport:
- results_text.insert(tk.END, "\n\n**Raport de eroare**\n\n")
- results_text.insert(tk.END, raport)
- results_text.tag_configure("red", foreground="red")
- results_text.pack(padx=10, pady=10)
- results_text.focus_set()
- results_window.wait_window()
- if raport:
- results_text.insert(tk.END, "\n\n**Raport de eroare**\n\n")
- # Crearea cadrului pentru valorile analizelor
- valori_frame = tk.Frame(results_window)
- valori_frame.pack(padx=10, pady=10)
- # Crearea label-ului pentru titlul analizelor
- valori_label = tk.Label(valori_frame, text="Analize")
- valori_label.grid(row=0, column=0, columnspan=2, sticky="w")
- # Crearea label-ului pentru titlul valorilor normale
- valori_normale_label = tk.Label(valori_frame, text="Valori normale")
- valori_normale_label.grid(row=1, column=0, columnspan=2, sticky="w")
- # Parcurgerea listei de analize
- for analiza, valoare_text in entries.items():
- # Afisarea analizei în prima coloană
- valoare_label = tk.Label(valori_frame, text=analiza)
- valoare_label.grid(row=int(analiza[0]), column=0, sticky="w")
- # Afisarea valorii normale în a doua coloană
- try:
- valoare_val = float(valoare_text.replace(" ", ""))
- val_n_min, val_n_max = valori_normale.get(analiza, (None, None))
- if val_n_min is not None and val_n_max is not None:
- # Folosim o funcție pentru a afișa valoarea normală corectă
- valoare_normala_label = tk.Label(valori_frame, text=afiseaza_valoare_normala(analiza, val_n_min, val_n_max))
- valoare_normala_label.grid(row=int(analiza[0]), column=1, sticky="w")
- else:
- valoare_normala_label = tk.Label(valori_frame, text="Valoare nevalidă introdusă")
- valoare_normala_label.grid(row=int(analiza[0]), column=1, sticky="w")
- except ValueError:
- valoare_normala_label = tk.Label(valori_frame, text="Valoare incorectă introdusă")
- valoare_normala_label.grid(row=int(analiza[0]), column=1, sticky="w")
- # Afisarea analizelor rămase
- for analiza in ["ACIRD URIC (BARBATI)", "ACIRD URIC (FEMEI)", "ALBUMINA", "AMILAZA", "Bilirubină directă", "Bilirubină totală", "LDH (lactat dehidrogenază)", "LDH (lactat dehidrogenază)", "HEMOGLOBINA BARBATI", "HEMOGLOBINA FEMEI", "TROMBOCITE", "COLESTEROL", "FIBRIOGEN", "FIBRIOGEN", "AST", "ALT", "Bilirubina totală", "Urocultura"]:
- valoare_label = tk.Label(valori_frame, text=analiza)
- valoare_label.grid(row=int(analiza[0]), column=2, sticky="w")
- results_window.wait_window()
- # Crearea butonului pentru afișarea rezultatelor
- button1 = ttk.Button(root, text="Arată Rezultatele", command=afiseaza_rezultate)
- button1.grid(row=1, column=0, columnspan=4, pady=10)
- # Crearea butonului pentru generarea codului QR
- def generate_qr_code():
- data = {key: entry.get() for key, entry in entries.items()}
- qr = qrcode.QRCode(version=1, box_size=10, border=5)
- qr.add_data(str(data))
- qr.make(fit=True)
- img = qr.make_image(fill="black", back_color="white")
- img.save("analize.png")
- def afiseaza_valoare_normala(analiza, val_n_min, val_n_max):
- if analiza[0] in ["A", "B", "C", "D"]:
- return f"{val_n_min} - {val_n_max} (bărbați și femei)"
- else:
- return f"{val_n_min} - {val_n_max} (bărbați)"
- def afiseaza_valoare_normala(analiza, val_n_min, val_n_max):
- if analiza[0] in ["A", "B", "C", "D"]:
- return f"{val_n_min} - {val_n_max} (bărbați și femei)"
- else:
- return f"{val_n_min} - {val_n_max} (bărbați)"
- def generate_qr_code():
- data = {key: entry.get() for key, entry in entries.items()}
- qr = qrcode.QRCode(version=1, box_size=10, border=5)
- qr.add_data(str(data))
- qr.make(fit=True)
- img = qr.make_image(fill="black", back_color="white")
- img.save("analize.png")
- # Pentru al doilea QR Code care redirecționează spre o pagină web
- qr2 = qrcode.QRCode(version=1, box_size=10, border=5)
- qr2.add_data('https://pagina-web-cu-rezultatele-analizelor.com')
- qr2.make(fit=True)
- img2 = qr2.make_image(fill="black", back_color="white")
- img2.save("redirection.png")
- def clear_placeholder(event):
- current = text_widget.get("1.0", tk.END).strip()
- if current == "Introduceți simptomele aici...":
- text_widget.delete("1.0", tk.END)
- button2 = ttk.Button(root, text="Generează Cod QR", command=generate_qr_code)
- button2.grid(row=2, column=0, columnspan=4, pady=10)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement