Kivy Gragfische Oberfläche

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
ste8899
User
Beiträge: 3
Registriert: Dienstag 22. Mai 2018, 07:18

Hallo liebe Community,

ich bin endlich mit meinem Skript fertig, dieser soll bestimmte Dateien (mit den Datentyp .prt) in selbst gewählten Laufwerken, suchen und anschließend löschen. Nun soll ich dies alles mit einer Grafischen Oberfläche erstellen und ich soll Kivy nutzen. Aber irgendwie komm ich mit Kivy überhaupt nicht klar... Will das am Anfang eine abfrage erstellt wird, welches Laufwerk durchsucht werden soll, dann soll eine anzeige erscheinen die alle gefundenen Dateien aufzählt(inc. Pfad) und dann auch die Anzahl dessen und zu guter letzt soll noch gefragt werden ob diese wirklich gelöscht werden sollen. Und dann natürlich auch sowas wie z.B. "Sie haben den Laufwerk x ausgewählt" oder am Ende "die Dateien wurden erfolgreich gelöscht!" Unten seht ihr wie mein Skript ohne GUI aussieht:

Hauptprogramm:

Code: Alles auswählen

from laufwerk_durchsuchen import Laufwerke
from gefundene_objekte import Files
from löschen_der_dateien import Delete


objLaufwerk = Laufwerke()
laufwerke = objLaufwerk.laufwerkssuche()

objFiles = Files(laufwerke)
dateien = objFiles.gefundene_objekte()


objDelete = Delete(dateien)
objDelete.loeschung()
Modul: laufwerk_durchsuchen

Code: Alles auswählen

import win32api

class Laufwerke:

    def __init__(self):
        pass

    def laufwerkssuche(self):

        while True:
            print("Bitte Laufwerks-Buchstaben eigeben")
            global eingabe
            eingabe = input()+":\\"

            # Laufwerke wählen.
            thelist = win32api.GetLogicalDriveStrings()
            liste_mit_laufwerken = thelist.split('\000')[:-1]

            if eingabe in liste_mit_laufwerken:
                break
            else:
                print("Laufwerk nicht gefunden!")


        global driveslist
        driveslist = [eingabe]

        print("Folgende Laufwerke werden gescannt:", driveslist)
        return driveslist

Modul: gefundene_objekte

Code: Alles auswählen

import sys
from laufwerk_durchsuchen import Laufwerke
from pathlib import Path
import os

class suche:

    def __init__(self):
        pass

    def searchfiles(self, dateien):
        suffixes = []
        returnfile = []
        print("\nFolgende Datein wurden gefunden:")

        for root, dirs, files in os.walk(dateien):  # root = Path, dirs = folders, files = files
            for file in Path(str(root)).iterdir():
                if file.suffix == '.prt':  # oder -> file.stem == 'filename'
                    returnfile.append(file)


        return returnfile


class Files:

    def __init__(self, Laufwerke):
        self._laufwerke = Laufwerke

    def gefundene_objekte(self):
        objLaufwerk = Laufwerke()
        objSuche = suche()
        # Durch neue Funktion ersetzen und für jeden Laufwerksbuchstaben ausführen.
        dateiengesamt = []
        for elem in self._laufwerke:
            dateiengesamt += objSuche.searchfiles(elem)
        print(dateiengesamt)

        # Anzahl aller gefundenen Dateien.
        if (len(dateiengesamt)) == 0:
            print("\nEs konnten keine Protokolle gefunden werden")
            sys.exit()
        else:
            print("\nDie Anzahl der gefundenen Protokolle liegt bei:", (len(dateiengesamt)))
        return dateiengesamt

Modul: löschen_der_dateien

Code: Alles auswählen

import sys
import os
from datetime import datetime
from datetime import timedelta

class Delete:

    def __init__(self, dateien):
        self._dateien = dateien

    def loeschung(self):
        # Ausgabe wirklich löschen?
        print("\nSollen alle Protokolle die älter als 2 Monate sind, gelöscht werden?(0 = nein und 1 = ja)")
        loeschen = input()

        #Antwort ob gelöscht werden soll.
        if loeschen == "1":
            max_mtime = datetime.now() - timedelta(seconds=10)  # zum Testen auf 10 Sekunden eingestellt
            # Datei entfernen
            for elem in self._dateien:

                file_mtime = datetime.fromtimestamp(os.path.getmtime(elem))

                if file_mtime < max_mtime:
                    print("Alle Protokolle die älter als 2 Monate sind, wurden entfernt")
                    try:
                        os.remove(elem)

                    except:
                        print("Fehler beim löschen der Protokolle")
                        sys.exit()
                else:
                    print("Protokolle sind nicht älter als 2 Monate!")
        else:
            print("Sie haben den Vorgang abgebrochen")
            sys.exit()
            



Könnt ihr mir weiter helfen?

Danke im Vorraus :D

Gruß
Ste
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@ste8899: kivy kenn ich auch nicht. Aber zu Deinem sonstigen Code: Python ist nicht Java. Es macht also keinen Sinn für jede Klasse eine eigene Datei/Modul zu haben. Die Klassen, die Du geschrieben hast, sind auch unsinnig, weil das nichts anderes sind, als normale Funktionen kompliziert in Klassen verpackt. Vergiß das es `global` gibt, so wie Du das hier einsetzt, macht das auch überhaupt keinen Sinn. Dann hast Du weiterhin alle meine Ratschläge aus dem anderen Thread ignoriert. Wenn Du also beratungsresistent bist, warum sollte irgendwer versuchen Dir zu helfen?
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Kivy kann durch den Filechooser doch schon einmal das Laufwerk auswählen
https://kivy.org/docs/api-kivy.uix.filechooser.html
Die Suche und das löschen kannst du dann als Funktion (ohne Kivy) schreiben. Daher verstehe ich nicht, wo du bei Kivy hängst und mit was du nicht klar kommst
Antworten