From e56db3057219f9962e929ee8556e62e90bcfba27 Mon Sep 17 00:00:00 2001 From: Maxim Romanko Date: Thu, 22 Feb 2024 15:42:42 +0300 Subject: [PATCH] [FIX] Added new way to identify drives --- app/__init__.py | 29 ++++++++++++++++++----------- app/utils_drive.py | 7 +++++-- 2 files changed, 23 insertions(+), 13 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 1ccabc6..033b428 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -17,11 +17,11 @@ class App: self.root.title("Disk Eraser") self.root.geometry("400x300") self.root.minsize(400, 300) - self.__load_menu() + self.__load_menus() self.__init_table() self.root.mainloop() - def __load_menu(self): + def __load_menus(self): main_menu = Menu() help_menu = Menu(tearoff=0) @@ -30,12 +30,14 @@ class App: help_menu.add_command(label="О программе") main_menu.add_cascade(label="Справка", menu=help_menu) - bottom_frame = ttk.Frame(borderwidth=1, relief=SOLID, padding=[3, 5]) - erase_button = ttk.Button(bottom_frame, text="Стереть диск") - erase_button.pack(side=RIGHT) - bottom_frame.pack(side=BOTTOM, fill=X) self.root.config(menu=main_menu) + bottom_frame = ttk.Frame(borderwidth=1, relief=SOLID, padding=[3, 5]) + erase_button = ttk.Button(bottom_frame, text="Стереть диск", command=self.__erase_drive) + erase_button.pack(side=RIGHT) + bottom_frame.pack(side=BOTTOM, fill=X) + + def __load_drives(self): if OS_TYPE == "Windows": @@ -44,21 +46,21 @@ class App: self.drives = [] if disks := c.Win32_DiskDrive(): for disk in disks: - self.drives.append(Drive(disk.Model, disk.Name, disk.InterfaceType, disk.DefaultBlockSize, int(disk.Size))) + self.drives.append(Drive(disk.Model, disk.Name, disk.InterfaceType, disk.DefaultBlockSize, int(disk.Size), disk.SerialNumber)) elif OS_TYPE == "Linux": from diskinfo import Disk, DiskInfo di = DiskInfo() disks = di.get_disk_list(sorting=True) self.drives = [] - for d in disks: - self.drives.append(Drive(d.get_model(), d.get_path(), d.get_type_str(), d.get_logical_block_size(), int(d.get_size()*512))) + for disk in disks: + self.drives.append(Drive(disk.get_model(), disk.get_path(), disk.get_type_str(), disk.get_logical_block_size(), int(disk.get_size()*512), disk.get_serial_number())) def __init_table(self): self.__load_drives() # определяем столбцы - columns = ("name", "type", "capacity") + columns = ("name", "type", "capacity", "serial_num") self.drive_tree = ttk.Treeview(columns=columns, show="headings", selectmode="browse") self.drive_tree.pack(fill=BOTH, expand=1, side=TOP) @@ -66,14 +68,16 @@ class App: self.drive_tree.heading("name", text="Имя", anchor=W) self.drive_tree.heading("type", text="Тип", anchor=W) self.drive_tree.heading("capacity", text="Объем", anchor=W) + self.drive_tree.heading("serial_num", text="Серийный номер", anchor=W) self.drive_tree.column("#1", stretch=YES, width=150, minwidth=120) self.drive_tree.column("#2", stretch=NO, width=60, minwidth=60) self.drive_tree.column("#3", stretch=NO, width=100, minwidth=100) + self.drive_tree.column("#4", stretch=YES, width=150, minwidth=100) # добавляем данные for drive in self.drives: - self.drive_tree.insert("", END, values=(drive.name, drive.disk_type, self.__human_size(drive.capacity))) + self.drive_tree.insert("", END, values=(drive.name, drive.disk_type, self.__human_size(drive.capacity), drive.serial_num)) self.drive_tree.bind("<>", self.__drive_selected) @@ -89,3 +93,6 @@ class App: item = self.drive_tree.item(selected_item) self.selected = item["values"] print(self.selected) + + def __erase_drive(self): + print(self.selected) \ No newline at end of file diff --git a/app/utils_drive.py b/app/utils_drive.py index 79e4d2c..e5219ec 100644 --- a/app/utils_drive.py +++ b/app/utils_drive.py @@ -12,15 +12,18 @@ class Drive(): block_size: int = 512 - capacity: int + capacity: int + + serial_num = None - def __init__(self, name , path, disk_type, block_size, capacity): + def __init__(self, name , path, disk_type, block_size, capacity, dev_id): self.name = name self.disk_type = disk_type self.path = path if block_size is not None: self.block_size = block_size self.capacity = capacity + self.serial_num = dev_id def erase(self): pass