Skip to content

Noamsellam/py

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 

Repository files navigation

import tkinter as tk from tkinter import simpledialog, messagebox from tkinter import ttk import subprocess import threading import time

class Device: def init(self, name, ip, status="לא זמין"): self.name = name self.ip = ip self.status = status

class MainApplication(tk.Tk): def init(self): super().init()

    self.title("Network Devices Status")
    self.geometry("600x400")

    self.create_widgets()

    self.start_ping_check()

    self.protocol("WM_DELETE_WINDOW", self.on_closing)

def create_widgets(self):
    # הוספת לחצן "הוסף עמדה"
    add_device_button = tk.Button(self, text="הוסף עמדה", command=self.add_device)
    add_device_button.grid(row=0, column=0, pady=10)

    # הוספת לחצן "מחק מידע מהקובץ"
    delete_data_button = tk.Button(self, text="מחק מידע מהקובץ", command=self.delete_data_from_file)
    delete_data_button.grid(row=0, column=1, pady=10)

    self.tree = ttk.Treeview(self, columns=("Name", "IP", "Status"), show="headings", height=10, selectmode="browse")
    self.tree.heading("Name", text="שם")
    self.tree.heading("IP", text="כתובת IP")
    self.tree.heading("Status", text="מצב")
    self.tree.grid(row=1, column=0, columnspan=2, pady=20)

    # קריאה לפונקציה load_devices_from_file כדי להציג את המכשירים מהקובץ
    self.load_devices_from_file()

    # הוספת יכולת בחירה לטבלה
    self.tree.bind("<ButtonRelease-1>", self.on_tree_click)

def add_device(self):
    add_device_window = tk.Toplevel(self)
    add_device_window.title("הוסף עמדה")

    name_label = tk.Label(add_device_window, text="שם:")
    name_label.grid(row=0, column=0)
    name_entry = tk.Entry(add_device_window)
    name_entry.grid(row=0, column=1)

    ip_label = tk.Label(add_device_window, text="כתובת IP:")
    ip_label.grid(row=1, column=0)
    ip_entry = tk.Entry(add_device_window)
    ip_entry.grid(row=1, column=1)

    def confirm():
        name = name_entry.get()
        ip = ip_entry.get()

        if name and ip:
            if self.is_device_exists(name, ip):
                messagebox.showwarning("שגיאה", "השם או כתובת ה-IP כבר קיימים. נסה שנית.")
            else:
                new_device = Device(name, ip)
                self.tree.insert("", tk.END, values=(new_device.name, new_device.ip, new_device.status))
                self.add_device_to_file(new_device)

        add_device_window.destroy()

    confirm_button = tk.Button(add_device_window, text="אישור", command=confirm)
    confirm_button.grid(row=2, columnspan=2)

def delete_data_from_file(self):
    try:
        # פתח את הקובץ במצב כתיבה ומחק את כל התוכן
        with open("devices.txt", "w"):
            pass
        # אם נמחק בהצלחה, נעדכן את המכשירים במערך ובטבלה
        self.devices = []
        self.tree.delete(*self.tree.get_children())
        messagebox.showinfo("הודעה", "המידע נמחק בהצלחה.")
    except Exception as e:
        # אם יש שגיאה, הדפס אותה
        messagebox.showerror("שגיאה", f"שגיאה במחיקת המידע: {e}")

def show_device_details(self, device):
    details_window = tk.Toplevel(self)
    details_window.title(f"פרטי מכשיר - {device.name}")
    details_window.geometry("400x200")

    name_label = tk.Label(details_window, text=f"שם: {device.name}")
    name_label.pack(side=tk.LEFT, padx=10)

    ip_label = tk.Label(details_window, text=f"כתובת IP: {device.ip}")
    ip_label.pack(side=tk.LEFT, padx=10)

    delete_button = tk.Button(details_window, text="מחק",
                              command=lambda: self.delete_device_and_cancel(device, details_window))
    delete_button.pack(side=tk.LEFT, padx=10)

    confirm_button = tk.Button(details_window, text="שמור",
                               command=lambda: self.save_and_close_device(device, details_window))
    confirm_button.pack(side=tk.LEFT, padx=10)

def delete_device_and_cancel(self, device, window):
    # מחיקת העמדה מהטבלה
    item_id = self.tree.get_children()[self.devices.index(device)]
    self.tree.delete(item_id)

    # מחיקת המכשיר מהקובץ
    self.delete_device_from_file(device)

    # סגירת החלון
    window.destroy()

    # לאחר המחיקה, עדכן את המצב בקובץ
    self.save_devices_to_file()

def save_and_close_device(self, device, window):
    # שמירת העמדה לקובץ
    self.save_devices_to_file()

    # סגירת החלון
    window.destroy()

def refresh_device(self, device):
    status = self.check_device_status(device)
    device.status = "זמין" if status else "לא זמין"
    item_id = self.devices.index(device)
    self.tree.item(item_id, values=(device.name, device.ip, device.status))

def delete_device(self, device):
    self.devices.remove(device)
    item_id = self.tree.get_children()[self.devices.index(device)]
    self.tree.delete(item_id)
    self.delete_device_from_file(device)

def is_device_exists(self, name, ip):
    for device in self.devices:
        if device.name == name or device.ip == ip:
            return True
    return False

def check_device_status(self, device):
    try:
        subprocess.check_output(["ping", "-c", "1", device.ip])
        return True
    except subprocess.CalledProcessError:
        return False

def start_ping_check(self):
    def ping_check_thread():
        while True:
            for device in self.devices:
                status = self.check_device_status(device)
                device.status = "זמין" if status else "לא זמין"
                item_id = self.devices.index(device)
                self.tree.item(item_id, values=(device.name, device.ip, device.status))

            self.save_devices_to_file()

            self.update_idletasks()  # הוספת עדכון גרפי

            time.sleep(60)

    ping_check_thread = threading.Thread(target=ping_check_thread)
    ping_check_thread.daemon = True
    ping_check_thread.start()

def on_closing(self):
    self.save_devices_to_file()
    self.destroy()

def load_devices_from_file(self):
    try:
        with open("devices.txt", "r") as file:
            lines = file.readlines()
            devices = [Device(*line.strip().split(',')) for line in lines]

        for device in devices:
            self.tree.insert("", tk.END, values=(device.name, device.ip, device.status))

        self.devices = devices

    except FileNotFoundError:
        return []

def save_devices_to_file(self):
    with open("devices.txt", "w") as file:
        for device in self.devices:
            file.write(f"{device.name},{device.ip}\n")

def delete_device_from_file(self, device):
    self.devices.remove(device)
    self.save_devices_to_file()

def add_device_to_file(self, device):
    self.devices.append(device)
    self.save_devices_to_file()

def on_tree_click(self, event):
    # פונקציה זו תיקרא כאשר המשתמש לוחץ על שורה בטבלה
    selected_items = self.tree.selection()
    if selected_items:
        for item_id in selected_items:
            try:
                # נבדוק אם המחרוזת מתחילה ב-I ואז נמיר את החלק המספרי
                if item_id.startswith("I"):
                    item_number = int(item_id[1:])
                    selected_device = self.devices[item_number - 1]
                    print(f"בחרת במכשיר: {selected_device.name}")
                else:
                    # אחרת, הדפס שגיאה
                    print(f"Invalid item_id format: {item_id}")
            except ValueError as e:
                # הדפס את הערך שגרם לשגיאה
                print(f"Error converting item_id to integer: {e}")

if name == "main": app = MainApplication() app.mainloop()

About

העברה ממחשב למחשב

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published