[ADD] New classes for GUI, added parsing linux drives
This commit is contained in:
parent
84c136d932
commit
921ee3a201
91
app/__init__.py
Normal file
91
app/__init__.py
Normal file
@ -0,0 +1,91 @@
|
||||
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_menu()
|
||||
self.__init_table()
|
||||
self.root.mainloop()
|
||||
|
||||
def __load_menu(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)
|
||||
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)
|
||||
|
||||
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)))
|
||||
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)))
|
||||
|
||||
def __init_table(self):
|
||||
|
||||
self.__load_drives()
|
||||
|
||||
# определяем столбцы
|
||||
columns = ("name", "type", "capacity")
|
||||
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.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)
|
||||
|
||||
# добавляем данные
|
||||
for drive in self.drives:
|
||||
self.drive_tree.insert("", END, values=(drive.name, drive.disk_type, self.__human_size(drive.capacity)))
|
||||
|
||||
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)
|
||||
@ -1,4 +1,4 @@
|
||||
from utils.globals import OS_TYPE
|
||||
from app.globals import OS_TYPE
|
||||
|
||||
class Drive():
|
||||
|
||||
27
main.py
27
main.py
@ -1,25 +1,8 @@
|
||||
from utils.utils_drive import Drive
|
||||
from utils.globals import *
|
||||
from app import App
|
||||
|
||||
|
||||
if OS_TYPE == "Windows":
|
||||
import wmi
|
||||
c = wmi.WMI()
|
||||
drives = []
|
||||
if disks := c.Win32_DiskDrive():
|
||||
for disk in disks:
|
||||
drives.append(Drive(disk.Model, disk.Name, disk.InterfaceType, disk.DefaultBlockSize, int(disk.Size)))
|
||||
elif OS_TYPE == "Linux":
|
||||
import subprocess
|
||||
def main():
|
||||
app = App()
|
||||
|
||||
# Execute the lsblk command to get information about block devices
|
||||
result = subprocess.run(['lsblk', '-o', 'NAME,SIZE,MODEL,VENDOR,TRAN'], capture_output=True, text=True)
|
||||
|
||||
# Get the output
|
||||
output = result.stdout
|
||||
|
||||
# Вывод информации о дисках
|
||||
print(output)
|
||||
|
||||
# for drive in drives:
|
||||
# print(f"{drive.name} | {drive.path} | {drive.disk_type} | {drive.block_size} | {drive.capacity}")
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
BIN
requirements.txt
BIN
requirements.txt
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user