Aus Einfallslosigkeit/-reichtum, wie man es auch nennen mag, habe ich so etwas, wie einen kleinen Desktop geschrieben. Das Ganze ist noch stark ausbaufähig bzw. änderungsbedürftig. Die Fenster werden noch in Frames gepackt, falls das nötig ist. Die Klassen hätte man zwar auch als Funktionen schreiben können, ich fand es aber am Anfang besser, ein Fenster als separate Klasse zu haben und habe das dann so fortgeführt. Geplant ist noch die Änderung der Hintergrundfarbe und das Einrichten von Desktop-Symbolen.
Getestet wurde bisher mit Python 2.6 und auf 1920x1080 bzw. 1024x768 Bildschirmen. Sollte es nicht richtig dargestellt werden, sehe ich mir den Fehler an.
PIL wird benötigt, sonst endet der Interpreter. Es wird eine Bilddatei erstellt ("def__wallp__.png"). Sollte ein gleichnamiges Bild vorhanden sein, wir das überschrieben (möglicher Datenverlust).
EDIT:
Code jetzt im Paste-Bin:
http://www.python-forum.de/pastebin.php?mode=view&s=187
Dark Shadow
P.S.: Ich dachte, das passt hier vielleicht rein, weil ein Code-Snippet mMn kürzer ist.
Tkinter "Desktop"
-
- User
- Beiträge: 38
- Registriert: Samstag 23. April 2011, 15:49
Zuletzt geändert von Dark Shadow am Dienstag 10. Mai 2011, 14:56, insgesamt 1-mal geändert.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Bei einem so langem Quellcode sollte man den in ein Paste-Bin auslagern, etwa das integrierte in diesem Board oder paste.pocoo.org oder dergleichen.Dark Shadow hat geschrieben: P.S.: Ich dachte, das passt hier vielleicht rein, weil ein Code-Snippet mMn kürzer ist.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Dein Desktop sieht ganz gut aus, kann man eventuell für irgendein Spiel verwenden.
Diese Stelle finde ich komisch:
Wiso fängst du einen Fehler ab, wenn du das Programm dann sowieso beenden willst?
Diese Stelle finde ich komisch:
Code: Alles auswählen
ext = 0
try:
from PIL import Image as I, ImageTk as itk
except:
ext = 1
if ext == 1:
exit()
-
- User
- Beiträge: 38
- Registriert: Samstag 23. April 2011, 15:49
Das ist ja gerade der Hintergrund:
Das Programm bei einem Fehler beenden.
Ist PIL nicht vorhanden, wird sofort Schluss gemacht. ext ist anfangs ja 0, ändert sich aber, wenn ein ImportError vorliegt. Ich hatte das Problem mit dem Importieren von ttk. Mehrere try-except-Blöcke sind so mMn einfacher als Fehler einzustufen, das das Skript sonst teilweise nicht funktionieren kann (z. B. ttk.Button(...) aber ttk nicht importiert). Deshalb steht bei except "ext=1", was das Beenden zur Folge hat.
Danke aber schon mal für dein Review.
Dark Shadow
Das Programm bei einem Fehler beenden.
Ist PIL nicht vorhanden, wird sofort Schluss gemacht. ext ist anfangs ja 0, ändert sich aber, wenn ein ImportError vorliegt. Ich hatte das Problem mit dem Importieren von ttk. Mehrere try-except-Blöcke sind so mMn einfacher als Fehler einzustufen, das das Skript sonst teilweise nicht funktionieren kann (z. B. ttk.Button(...) aber ttk nicht importiert). Deshalb steht bei except "ext=1", was das Beenden zur Folge hat.
Danke aber schon mal für dein Review.
Dark Shadow
Trotzdem ist ein
einfacher
Noch zwei Anmerkungen: Mit einem leeren Except fängst du alle Fehler aber, was ein Debugging später unter Umständen unmöglich macht. Gib immer die Fehler an, welche du auch tatsächlich behandeln kannst und willst. In deinem Fall also einen ``ImportError``. Außerdem gibt es ``True`` und ``False``, du solltes daher die Nullen und Einsen ersetzen.
Code: Alles auswählen
try:
from PIL import Image as I, ImageTk as itk
except:
exit()
Noch zwei Anmerkungen: Mit einem leeren Except fängst du alle Fehler aber, was ein Debugging später unter Umständen unmöglich macht. Gib immer die Fehler an, welche du auch tatsächlich behandeln kannst und willst. In deinem Fall also einen ``ImportError``. Außerdem gibt es ``True`` und ``False``, du solltes daher die Nullen und Einsen ersetzen.
Das Leben ist wie ein Tennisball.
-
- User
- Beiträge: 38
- Registriert: Samstag 23. April 2011, 15:49
In jeder 0 steckt ein False
Ich dachte, um es variabler Handzuhaben, wäre es so nützlicher, aber das ist jetzt ausgebessert. Ich hatte es vorher auch so, aber da war dann das Problem mit ttk. Jetzt steht es so da, wie bei Dir.
Danke!
P.S.: Ich versuche gerade, das Programm mit py2exe zu kompilieren. Anscheinend gibt es irgendein Problem. Mein "desktop_setup.py" sieht folgendermaßen aus:
Ich bekomme die Windows-Fehlermeldung, dass mein Programm ("py_2_exe_desktop.py") ein Problem hat und deswegen nicht beendet wurde. An "desk.overrideredirect(1)" liegt es (wie ich vermutet habe) nicht. Verwende ich kein "options = {'py2exe': {'bundle_files': 1}}", funktioniert es. Woran könnte es liegen, dass es nur mit "options" nicht klappt?
Danke schon mal jetzt.
Ich dachte, um es variabler Handzuhaben, wäre es so nützlicher, aber das ist jetzt ausgebessert. Ich hatte es vorher auch so, aber da war dann das Problem mit ttk. Jetzt steht es so da, wie bei Dir.
Danke!
P.S.: Ich versuche gerade, das Programm mit py2exe zu kompilieren. Anscheinend gibt es irgendein Problem. Mein "desktop_setup.py" sieht folgendermaßen aus:
Code: Alles auswählen
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
windows = [{'script': "py_2_exe_desktop.py", 'icon_resources':[(0, "icon.ico")]}],
zipfile = None,
)
Danke schon mal jetzt.
Mach aus dem "except:" noch "except ImportError:", ansonsten fängst du jede Exception ab und verdeckst eventuell damit welche die du nicht erwartest.
bundle_files = 1 war eine einzelne Exe-Datei, oder? Das geht mit Tkinter nicht du mu kannst die Tk/Tcl-Libs nicht mit in die Exe packen, du musst die als Libs mitliefern.
bundle_files = 1 war eine einzelne Exe-Datei, oder? Das geht mit Tkinter nicht du mu kannst die Tk/Tcl-Libs nicht mit in die Exe packen, du musst die als Libs mitliefern.
-
- User
- Beiträge: 276
- Registriert: Freitag 8. Juni 2007, 08:50
- Wohnort: 84xxx Bereich
- Kontaktdaten:
wenn du wirklich nur EINE exe datei willst, muss ich dir leider von py2exe abraten. hab damit ewigst zeit verbracht und es dann letztendlich bleiben lassen nur EINE exe zu erhalten.
vor kurzem bin ich über pyinstaller gefallen und hab mich nochmal daran versucht aus meinem damaligen python programm EINE exe zu bauen.
und ich muss sagen, nach ein paar kleinen anfangsschwierigkeiten hat es dann geklappt.
also wenn du EINE exe willst, schau dir mal pyintaller an.
just for info
vor kurzem bin ich über pyinstaller gefallen und hab mich nochmal daran versucht aus meinem damaligen python programm EINE exe zu bauen.
und ich muss sagen, nach ein paar kleinen anfangsschwierigkeiten hat es dann geklappt.
also wenn du EINE exe willst, schau dir mal pyintaller an.
just for info