disk_eraser/app/__init__.py

98 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import List
from app.utils_drive import Drive
from app.globals import *
from tkinter import *
from tkinter import ttk
class App:
drives: List[Drive] = []
selected = None
drive_tree = None
def __init__(self):
self.root = Tk()
self.root.title("Disk Eraser")
self.root.geometry("400x300")
self.root.minsize(400, 300)
self.__load_menus()
self.__init_table()
self.root.mainloop()
def __load_menus(self):
main_menu = Menu()
help_menu = Menu(tearoff=0)
help_menu.add_command(label="Содержание")
help_menu.add_separator()
help_menu.add_command(label="О программе")
main_menu.add_cascade(label="Справка", menu=help_menu)
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":
import wmi
c = wmi.WMI()
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))
elif 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()))
def __init_table(self):
self.__load_drives()
# определяем столбцы
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)
# определяем заголовки
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), drive.serial_num))
self.drive_tree.bind("<<TreeviewSelect>>", self.__drive_selected)
def __human_size(self, size):
units = ['Б', 'КБ', 'МБ', 'ГБ', 'ТБ', 'ПБ']
for unit in units:
if size < 1024:
return f"{size:.1f} {unit}"
size /= 1024
def __drive_selected(self, event):
for selected_item in self.drive_tree.selection():
item = self.drive_tree.item(selected_item)
self.selected = item["values"]
print(self.selected)
def __erase_drive(self):
print(self.selected)