Ja, das ist mein Ernst! Ihr habt keine Ahnung von Python, und ich will euch zeigen, wie man einen Software-Manager baut. Keine Angst, es wird ein Billiger mit den einfachsten Mitteln, die Python zu bieten hat.
Warum zeige ich euch nicht Python von Anfang an?
Das soll nur ein kleines Appetitäffchen sein, um auf den Geschmack zu kommen. Die meisten Tutorials zeigen erst einmal, wie man "Hello World!" in der Konsole ausdruckt.
Das hat mich persönlich total abgeturnt, weil ich eigentlich etwas Richtiges programmieren wollte.
Aber wenn man weiß, was mit ganz einfachen Mitteln geht, kann das dann anspornen, um mehr zu erfahren und in der Thematik zu versinken.
Code-Beispiele:
< mint-install(Links) |Vom Onkel(Rechts) > :
DAS ist Python! Genauer gesagt, Python-GTK. Sieht wieder echt wild aus, aber wenn man Bock hat herauszufinden, wie mint-install funktioniert, kann man das mit ein bisschen Google lernen.
Dann sieht Euer Software-Manager bald so aus wie der vom Onkel.
Nun… . Wir lassen das heute zunächst mit Screenshots, Beschreibungen und Multi-Frames, und konzentrieren uns auf die reine Funktion des Updates.
Vorbereitung
thonny Sehr einfacher Coder-Editor.
python3-tk Python-Modul, um Fenster zu zeichnen.
xtern Terminal-Emulator, den man einbetten kann.
sudo apt install thonny python3-tk xterm -y
Schritt 1: Ein Fenster zeichnen
Wenn wir thonny geöffnet haben können wir auch schon loslegen. Als Erstes brauchen wir ein Fenster. Der grüne Button startet das Script, der Rote stoppt es.
from tkinter import *
# Zeichnet das Fensters
main = Tk()
main.title('Software Manager')
main.geometry("600x600")
# Startet das Fenster
main.mainloop()
Alles anzeigen
from tkinter import * Dieser Befehl importiert alle Klassen und Funktionen aus dem Tkinter-Modul. Tkinter ist ein in Python eingebautes Modul zur Erstellung grafischer Benutzeroberflächen.
- main = Tk(): Hier wird ein Tkinter-Fenster erstellt und der Variable main zugewiesen. Das Fenster wird als Wurzel- oder Hauptfenster für Ihre Anwendung dienen.
- main.title('Software Manager'): Mit diesem Befehl wird der Fenstertitel auf "Software Manager" gesetzt. Dies ist der Text, der in der Titelleiste des Fensters angezeigt wird.
- main.geometry("600x600"): Diese Zeile setzt die Größe des Fensters auf 600x600 Pixel. Das Fenster wird beim Start in dieser Größe angezeigt.
- main.mainloop(): Dies ist eine Endlosschleife, die das Hauptfenster anzeigt und auf Benutzereingaben wartet. Solange das Hauptfenster geöffnet ist, bleibt diese Schleife aktiv, und die GUI-Anwendung reagiert auf Benutzerinteraktionen.
Schritt 2: Rahmen zeichnen
from tkinter import *
# Zeichnet das Fensters
main = Tk()
main.title('Software Manager')
main.geometry("600x600")
button_frame = Frame(main,background="red")
button_frame.pack(fill="both",expand=True)
terminal_frame = Frame(main,background="blue")
terminal_frame.pack(fill="both",expand=True)
# Startet das Fenster
main.mainloop()
Alles anzeigen
In diesem Teil des Codes werden zwei Frames (Rahmen) in das Hauptfenster (main) eingefügt. Frames sind Container oder Behälter, die verwendet werden können, um andere Widgets wie Schaltflächen, Textfelder und andere GUI-Elemente zu organisieren.
Erklärung für die beiden erstellten Frames:
- button_frame = Frame(main, background="red"):
- button_frame ist eine Variable, die auf einen neuen Frame verweist, der im Hauptfenster main erstellt wird.
- background="red" setzt die Hintergrundfarbe des Frames auf Rot.
- button_frame.pack(fill="both", expand=True):
- button_frame.pack() wird verwendet, um den Frame in das Hauptfenster einzufügen und anzuzeigen.
- fill="both" bewirkt, dass der Frame in beide Richtungen (horizontal und vertikal) erweitert wird, um den verfügbaren Platz im Hauptfenster auszufüllen. Dies sorgt dafür, dass der Frame die gesamte Breite und Höhe des Hauptfensters einnimmt.
- expand=True ermöglicht es dem Frame, sich an die Größe des Hauptfensters anzupassen und den verfügbaren Platz vollständig auszufüllen.
- terminal_frame = Frame(main, background="blue"):
- Ähnlich wie zuvor wird hier ein zweiter Frame mit dem Namen terminal_frame erstellt, der ebenfalls im Hauptfenster main liegt. Dieser Frame hat eine Hintergrundfarbe von Blau.
- terminal_frame.pack(fill="both", expand=True):
- Hier wird der terminal_frame in das Hauptfenster eingefügt, und die Einstellungen sind identisch mit denen des button_frame. Der Frame wird also sowohl horizontal als auch vertikal erweitert und füllt den verfügbaren Platz im Hauptfenster aus.
Schritt 3: Buttons anlegen
from tkinter import *
# Zeichnet das Fensters
main = Tk()
main.title('Software Manager')
main.geometry("600x600")
button_frame = Frame(main,background="red")
button_frame.pack(fill="both",expand=True)
update_button = Button(button_frame, text="Update")
update_button.grid(row=0,column=0)
update_button = Button(button_frame, text="Upgrade")
update_button.grid(row=0,column=1)
terminal_frame = Frame(main,background="blue")
terminal_frame.pack(fill="both",expand=True)
# Startet das Fenster
main.mainloop()
Alles anzeigen
update_button = Button(button_frame, text="Update"): Hier wird eine Schaltfläche (Button) mit dem Text "Update" erstellt und der Variable update_button zugewiesen. Das Button-Widget ist ein Element in Tkinter, das es dem Benutzer ermöglicht, auf einen Knopf zu klicken und eine damit verbundene Aktion auszulösen. button_frame ist der Elternrahmen (Container), in dem diese Schaltfläche platziert wird.
- update_button.grid(row=0, column=0): Mit diesem Befehl wird die Schaltfläche in button_frame positioniert. Die Methode grid wird verwendet, um Widgets in einem Rastersystem anzuordnen. In diesem Fall wird die Schaltfläche in der ersten Zeile (row=0) und der ersten Spalte (column=0) des Rasters platziert. Das bedeutet, dass die Schaltfläche oben links in button_frame positioniert wird.
Der zweite Codeabschnitt erstellt eine ähnliche Schaltfläche, aber mit dem Text "Upgrade", und platziert sie in derselben Zeile (row=0) aber in der zweiten Spalte (column=1) des Rasters in button_frame.
Schritt 4: Den Buttons Funktionen geben
from tkinter import *
import os
# Zeichnet das Fensters
main = Tk()
main.title('Software Manager')
main.geometry("600x600")
def up_action():
os.popen(f'xterm -into %d -bg Grey11 -geometry 1000x50 -e "pkexec apt update && exit ; exec bash"'% wid)
def upg_action():
os.popen(f'xterm -into %d -bg Grey11 -geometry 1000x50 -e "pkexec apt upgrade && exit ; exec bash"'% wid)
button_frame = Frame(main,background="red")
button_frame.pack(fill="both",expand=True)
update_button = Button(button_frame, text="Update",command=up_action)
update_button.grid(row=0,column=0)
update_button = Button(button_frame, text="Upgrade",command=upg_action)
update_button.grid(row=0,column=1)
terminal_frame = Frame(main,background="blue")
terminal_frame.pack(fill="both",expand=True)
wid = terminal_frame.winfo_id()
# Startet das Fenster
main.mainloop()
Alles anzeigen
import os: Dieser Befehl importiert das Python-Modul os, mit dem man Betriebssystemfunktionen aufrufen kann.
- Die Funktionen up_action() und upg_action() werden definiert. Diese Funktionen werden aufgerufen, wenn die entsprechenden Schaltflächen in der GUI geklickt werden. up_action() führt den Befehl apt update aus, um die Software-Paketliste zu aktualisieren, und upg_action() führt den Befehl apt upgrade aus, um die installierte Software zu aktualisieren.
- wid = terminal_frame.winfo_id(): Dieser Code ruft die ID des terminal_frame ab, die benötigt wird, um das Terminal in das GUI-Fenster einzubetten.
os.popen(): Dies ist eine Funktion aus dem os-Modul, die dazu verwendet wird, ein Betriebssystem-Kommando auszuführen und die Ausgabe dieses Kommandos zu erfassen. Sie öffnet eine Pipe (Rohr) zur Ausführung des angegebenen Kommandos.
- f'xterm -into %d -bg Grey11 -geometry 1000x50 -e "pkexec apt update && exit ; exec bash"'% wid: Ist der Befehl, der im Terminal ausgeführt wird. Er wird als Zeichenkette formatiert (daher das f vor dem String), um den Wert der Variable wid einzusetzen. # Die f-Strings bringen uns jetzt noch nicht, sind aber in Teil 2 wichtig.
- xterm -into %d: Dies startet ein neues xterm-Terminalfenster und bindet es in das übergeordnete Fenster ein. %d wird durch den Wert von wid ersetzt, der zuvor die ID des Frame terminal_frame gespeichert hat. Dadurch wird das Terminalfenster in das GUI-Fenster eingebettet.
- -bg Grey11: Setzt die Hintergrundfarbe des Terminalfensters auf Grau.
- -geometry 1000x50: Legt die Größe des Terminalfensters auf 1000x50 Pixel fest. #Hab' ich aus einem von meinen anderen Programmen kopiert und passt eigentlich nicht, der Parameter änder aber nichts an der Geometrie
- -e "pkexec apt update && exit ; exec bash": Dies ist der Befehlsstring, der im Terminal ausgeführt wird.
- pkexec apt update: Führt den Befehl pkexec apt update aus, um das Paketrepository zu aktualisieren. Das pkexec-Kommando wird verwendet, um den Befehl als Superuser (root) auszuführen, da das Aktualisieren des Paketrepositories normalerweise Administratorrechte erfordert.
- && exit: Beendet das Terminalfenster, nachdem der vorherige Befehl abgeschlossen ist.
- exec bash: Startet eine neue Bash-Shell im Terminalfenster. Dies kann hilfreich sein, wenn der Benutzer nach Abschluss des Updates weitere Aufgaben ausführen möchte.
In Teil 2 bauen wir noch nen Installer ein und in Teil 3 machen wir alles schön
Download des Codes:
Kleiner Ausblick auf Nächste Woche:
simplescreenrecorder-2023-09-26_11.02.55.mp4
Kommentare 4