[ADD] Added new button and fixes linux drives

This commit is contained in:
vadzik 2024-02-23 12:39:13 +03:00
parent 8a393afb42
commit c6b5f40b70
3 changed files with 32 additions and 18 deletions

View File

@ -19,10 +19,11 @@ class App:
self.root = Tk()
self.root.title("Disk Eraser")
self.root.geometry("400x300")
self.root.minsize(400, 300)
self.root.geometry("700x300")
self.root.minsize(700, 300)
self.__load_menus()
self.__init_table()
self.__update_drives()
self.root.mainloop()
def __load_menus(self):
@ -37,11 +38,21 @@ class App:
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)
self.erase_button = ttk.Button(bottom_frame, text="Стереть диск", command=self.__erase_drive)
self.erase_button.pack(side=RIGHT)
update_button = ttk.Button(bottom_frame, text="Обновить", command=self.__update_drives)
update_button.pack(side=RIGHT, padx=5)
bottom_frame.pack(side=BOTTOM, fill=X)
def __update_drives(self):
self.drive_tree.delete(*self.drive_tree.get_children())
self.__load_drives()
for drive in self.drives:
self.drive_tree.insert("", END, values=(drive.index, drive.name, drive.disk_type, self.__human_size(drive.capacity), drive.serial_num))
def __load_drives(self):
if self.OS_TYPE == "Windows":
@ -50,39 +61,37 @@ 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), disk.SerialNumber))
self.drives.append(Drive(disk.Model, disk.Name, disk.InterfaceType, disk.DefaultBlockSize, int(disk.Size), disk.SerialNumber, disk.Index))
elif self.OS_TYPE == "Linux":
from diskinfo import Disk, DiskInfo
di = DiskInfo()
disks = di.get_disk_list(sorting=True)
self.drives = []
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()))
if "zram" not in disk.get_path():
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(), disk.get_device_id()))
def __init_table(self):
self.__load_drives()
# определяем столбцы
columns = ("name", "type", "capacity", "serial_num")
columns = ("index", "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)
# определяем заголовки
self.drive_tree.heading("index", text="ID", anchor=W)
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("#1", stretch=NO, width=60, minwidth=60)
self.drive_tree.column("#2", stretch=YES, width=150, minwidth=120)
self.drive_tree.column("#3", stretch=NO, width=100, minwidth=100)
self.drive_tree.column("#4", stretch=YES, width=150, minwidth=100)
self.drive_tree.column("#5", 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), drive.serial_num))
self.drive_tree.bind("<<TreeviewSelect>>", self.__drive_selected)
def __human_size(self, size):
@ -99,4 +108,6 @@ class App:
print(self.selected)
def __erase_drive(self):
print(self.selected)
self.erase_button.configure(state='disabled')
print(self.selected)
self.erase_button.configure(state='active')

View File

@ -1,5 +1,7 @@
class Drive():
index: int = None
path: str
total_sectors: str
@ -14,7 +16,7 @@ class Drive():
serial_num = None
def __init__(self, name , path, disk_type, block_size, capacity, dev_id):
def __init__(self, name , path, disk_type, block_size, capacity, dev_id, index):
self.name = name
self.disk_type = disk_type
self.path = path
@ -22,6 +24,7 @@ class Drive():
self.block_size = block_size
self.capacity = capacity
self.serial_num = dev_id
self.index = index
def erase(self):
pass

BIN
req.txt

Binary file not shown.