Release 1.2.0: wxPython migration + vacation exclusion

This commit is contained in:
2026-03-02 17:37:10 +01:00
parent 07c8905f47
commit db76fbf0d2
14 changed files with 190 additions and 939 deletions

View File

@@ -6,15 +6,15 @@ Native GUI-Lösung mit **wxPython** - funktioniert zuverlässig auf macOS 13.6,
Nach den Problemen mit BeeWare/Toga (macOS 13.7+ erforderlich) ist wxPython die perfekte Lösung:
| Feature | Tkinter | BeeWare/Toga | **wxPython** |
|---------|---------|--------------|--------------|
| Native auf macOS | ❌ | ✅ (nur 13.7+) | ✅ **Alle Versionen** |
| Native auf Windows | ❌ | ✅ | ✅ |
| Native auf Linux | ❌ | ✅ | ✅ |
| Stabilität | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Look & Feel | Blechig | Modern | **Perfekt nativ** |
| macOS 13.6 Support | ✅ | ❌ | ✅ |
| Installation | Einfach | Kompliziert | Einfach |
| Feature | BeeWare/Toga | **wxPython** |
|---------|--------------|--------------|
| Native auf macOS | ✅ (nur 13.7+) | ✅ **Alle Versionen** |
| Native auf Windows | ✅ | ✅ |
| Native auf Linux | ✅ | ✅ |
| Stabilität | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Look & Feel | Modern | **Perfekt nativ** |
| macOS 13.6 Support | ❌ | ✅ |
| Installation | Kompliziert | Einfach |
---
@@ -58,6 +58,7 @@ Die App startet sofort mit **nativen macOS-Widgets**! 🎉
3. **Exportoptionen**
- Checkbox für "Ruhetage ausschließen"
- Checkbox für "Urlaub ausschließen (060, 0060)"
- Speichert Einstellung persistent
4. **Konvertierung**
@@ -100,6 +101,7 @@ Die App startet sofort mit **nativen macOS-Widgets**! 🎉
│ [/Users/sebastian/Documents ] 📁 │ ← Native TextCtrl
├─────────────────────────────────────┤
│ ☐ Ruhetage ausschließen │ ← Native CheckBox
│ ☐ Urlaub ausschließen (060) │ ← Native CheckBox
├─────────────────────────────────────┤
│ Status: │
│ ┌─────────────────────────────────┐ │
@@ -115,24 +117,16 @@ Die App startet sofort mit **nativen macOS-Widgets**! 🎉
---
## 🔧 Unterschiede zu Tkinter
## 🔧 wxPython APIs im Überblick
### 1. Event Handling
```python
# Tkinter
btn = tk.Button(text="Klick", command=self.on_click)
# wxPython
btn = wx.Button(panel, label="Klick")
btn.Bind(wx.EVT_BUTTON, self.on_click)
```
### 2. Layout
```python
# Tkinter
frame.pack(fill=tk.BOTH, expand=True)
# wxPython
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(widget, 1, wx.EXPAND)
panel.SetSizer(sizer)
@@ -140,19 +134,11 @@ panel.SetSizer(sizer)
### 3. Threading + UI
```python
# Tkinter
self.log_text.insert(tk.END, "Message\n")
# wxPython
wx.CallAfter(self.log_text.AppendText, "Message\n")
```
### 4. Dialog
```python
# Tkinter
filedialog.askopenfilenames(...)
# wxPython
with wx.FileDialog(...) as dialog:
if dialog.ShowModal() == wx.ID_CANCEL:
return
@@ -177,7 +163,7 @@ self.pdf_listbox = wx.ListBox(panel, style=wx.LB_EXTENDED)
```
### ✅ Bessere Performance
- Schnellere Rendering als Tkinter
- Schnelle native Darstellung
- Native Controls = weniger CPU
### ✅ Moderne Features
@@ -211,6 +197,7 @@ python3 gui_wxpython.py
- [ ] "Alle entfernen" funktioniert
- [ ] "Durchsuchen" für Ausgabe-Verzeichnis funktioniert
- [ ] Checkbox "Ruhetage" funktioniert
- [ ] Checkbox "Urlaub ausschließen (060)" funktioniert
- [ ] "ICS Datei erstellen" startet Konvertierung
- [ ] Log zeigt Status in Echtzeit
- [ ] Nach Konvertierung: Erfolgs-Dialog
@@ -220,7 +207,7 @@ python3 gui_wxpython.py
---
## 📈 Migration von Tkinter
## 📈 Migration auf wxPython
### Was blieb gleich:
- Threading-Logik
@@ -236,25 +223,22 @@ python3 gui_wxpython.py
- ✅ Native Dialoge (About, File, Directory)
- ✅ Thread-sicheres UI-Update mit `wx.CallAfter`
### Status
- ✅ GUI-Start erfolgt über `start_gui.sh` / `start_gui.cmd`
- ✅ GUI-Einstiegspunkt ist `gui_wxpython.py`
---
## 🚀 Nächste Schritte (optional)
### 1. Ersetzt Tkinter vollständig
Wenn wxPython gut funktioniert, können wir:
```bash
mv gui.py gui_tkinter_old.py
mv gui_wxpython.py gui.py
```
### 2. Packaging mit PyInstaller
### 1. Packaging mit PyInstaller
```bash
pip install pyinstaller
pyinstaller --onefile --windowed gui_wxpython.py
```
→ Erstellt `.app` Bundle für macOS!
### 3. Weitere Features
### 2. Weitere Features
- Icon hinzufügen
- Statusbar mit Progress
- Toolbar mit Icons
@@ -263,19 +247,18 @@ pyinstaller --onefile --windowed gui_wxpython.py
---
## 🆚 Vergleich: Tkinter vs wxPython
## 🆚 Plattformstatus
| Kriterium | Tkinter | wxPython |
|-----------|---------|----------|
| **Look auf macOS** | ❌ Alt/blechig |**Perfekt nativ** |
| **Menüleiste** | ⚠️ Popup-Menü |**Native MenuBar** |
| **File Dialoge** | ⚠️ Ok |**Perfekt nativ** |
| **Thread-Safety** | ⚠️ Kompliziert |**wx.CallAfter** |
| **Installation** | ✅ Built-in | ⚠️ Pip install |
| **Bundle-Größe** | ✅ Klein | ⚠️ Größer (~20MB) |
| **Entwicklungszeit** | ✅ Schnell | ⚠️ Etwas länger |
| **macOS 13.6 Support** | ✅ Ja | ✅ **Ja!** |
| **Dark Mode** | ❌ | ✅ **Automatisch** |
| Kriterium | wxPython |
|-----------|----------|
| **Look auf macOS** | ✅ **Perfekt nativ** |
| **Menüleiste** | ✅ **Native MenuBar** |
| **File Dialoge** | ✅ **Perfekt nativ** |
| **Thread-Safety** | ✅ **wx.CallAfter** |
| **Installation** | ⚠️ Pip install |
| **Bundle-Größe** | ⚠️ Größer (~20MB) |
| **macOS 13.6 Support** | ✅ **Ja!** |
| **Dark Mode** | ✅ **Automatisch** |
---
@@ -296,7 +279,7 @@ pyinstaller --onefile --windowed gui_wxpython.py
2. ✅ Perfekter nativer Look & Feel
3. ✅ Keine Versionskonflikte
4. ✅ Stabil und production-ready
5. ✅ Einfache Migration von Tkinter
5. ✅ Einheitlicher GUI-Stack mit wxPython
6. ✅ Alle Features vollständig implementiert
**Status:** 🎉 **PRODUCTION READY!**