Vor 3 Stunden
Bitte auch dieses Beispiel zeigen, denn Perl Tk ist mir neu.
Zitat:Perfekt! Dann bauen wir jetzt eine erweiterte Windows-Version deines Perl-Projekts mit GUI, basierend auf Perl Tk. Damit hast du ein Mini-Task-Manager-Tool, das deine
direkt visualisiert, Aufgaben abhaken und neue Aufgaben hinzufügen kann.Code:tasks.json
1️⃣ Voraussetzungen
- Strawberry Perl installiert
- CPAN-Module installieren:
Code:cpan Tk
cpan JSON
→ für GUICode:Tk
→ für Aufgaben-DatenCode:JSON
2️⃣ Projektstruktur
Code:TaskManagerGUI/
│
├─ tasks_gui.pl ← Perl Tk GUI Skript
├─ tasks.json ← Aufgaben-Daten
├─ run_tasks_gui.bat ← Batch-Datei zum Starten
└─ README.md
3️⃣
– Perl Tk GUICode:tasks_gui.pl
Code:#!/usr/bin/perl
use strict;
use warnings;
use Tk;
use JSON;
use File::Spec;
# JSON-Datei
my $json_file = File::Spec->catfile(".", "tasks.json");
# Standardaufgaben erstellen, falls Datei fehlt
unless (-e $json_file) {
my @tasks = (
{ task => "Einkaufen", done => 0 },
{ task => "Perl lernen", done => 0 },
);
open my $fh, ">", $json_file or die "Kann Datei nicht erstellen: $!";
print $fh encode_json(\@tasks);
close $fh;
}
# JSON laden
sub load_tasks {
open my $fh, "<", $json_file or die "Kann Datei nicht öffnen: $!";
local $/;
my $json_text = <$fh>;
close $fh;
return decode_json($json_text);
}
sub save_tasks {
my ($tasks_ref) = @_;
open my $fh, ">", $json_file or die "Kann Datei nicht schreiben: $!";
print $fh encode_json($tasks_ref);
close $fh;
}
# GUI erstellen
my $mw = MainWindow->new;
$mw->title("Mini Task Manager");
my $frame = $mw->Frame()->pack(-side => 'top', -fill => 'both', -expand => 1);
my $listbox = $frame->Scrolled("Listbox", -scrollbars => 'e')->pack(-side => 'left', -fill => 'both', -expand => 1);
my $tasks = load_tasks();
sub refresh_list {
$listbox->delete(0, 'end');
for my $i (0..$#$tasks) {
my $t = $tasks->[$i];
my $status = $t->{done} ? "✓" : "✗";
$listbox->insert('end', "$status $t->{task}");
}
}
refresh_list();
# Eingabe für neue Aufgabe
my $entry = $mw->Entry()->pack(-side => 'top', -fill => 'x', -padx => 5, -pady => 5);
# Button: Aufgabe hinzufügen
$mw->Button(-text => "Aufgabe hinzufügen",
-command => sub {
my $text = $entry->get;
return unless $text;
push @$tasks, { task => $text, done => 0 };
save_tasks($tasks);
$entry->delete(0, 'end');
refresh_list();
})->pack(-side => 'top', -fill => 'x', -padx => 5, -pady => 5);
# Button: Aufgabe erledigen (abhaken)
$mw->Button(-text => "Ausgewählte Aufgabe erledigen",
-command => sub {
my $idx = $listbox->curselection;
return unless defined $idx->[0];
$tasks->[$idx->[0]]->{done} = 1;
save_tasks($tasks);
refresh_list();
})->pack(-side => 'top', -fill => 'x', -padx => 5, -pady => 5);
MainLoop;
4️⃣
– Batch-DateiCode:run_tasks_gui.bat
Code:@echo off
perl "%~dp0tasks_gui.pl"
pause
- Doppelklick → GUI öffnet sich
- Fenster zeigt Aufgaben an
- Aufgaben abhaken oder neue hinzufügen
- Änderungen werden direkt in
gespeichertCode:tasks.json
5️⃣ Vorteile dieser Version
- Vollständige GUI unter Windows
- JSON bleibt Datenquelle → kompatibel mit Python oder Skripten
- Batch-Datei für einfachen Start
- Perl Tk → einfache plattformübergreifende GUI ohne Visual Studio
- Erweiterbar: Filter, Aufgaben löschen, farbige Markierungen
6️⃣ Erweiterungsmöglichkeiten
- Aufgaben löschen: Button + Auswahl
- Sortierung / Filter: erledigt vs. offen
- Speichern beim Schließen: automatisch
- Integration mit Python: Python-Skripte aktualisieren
→ GUI zeigt Änderungen sofort anCode:tasks.json
- Drag & Drop: Aufgaben sortieren
Wenn du willst, kann ich als Nächstes noch eine Version bauen, in der Python und die Perl Tk GUI direkt zusammenarbeiten – also Python erzeugt automatisch Aufgaben, GUI aktualisiert live die Anzeige.
Willst du, dass ich das erstelle?

