Tkinter "Desktop"

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

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.
Zuletzt geändert von Dark Shadow am Dienstag 10. Mai 2011, 14:56, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dark Shadow hat geschrieben: P.S.: Ich dachte, das passt hier vielleicht rein, weil ein Code-Snippet mMn kürzer ist.
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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

Dein Desktop sieht ganz gut aus, kann man eventuell für irgendein Spiel verwenden.
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()
Wiso fängst du einen Fehler ab, wenn du das Programm dann sowieso beenden willst?
Dark Shadow
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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Trotzdem ist ein

Code: Alles auswählen

try:
    from PIL import Image as I, ImageTk as itk
except:
    exit()
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.
Das Leben ist wie ein Tennisball.
Dark Shadow
User
Beiträge: 38
Registriert: Samstag 23. April 2011, 15:49

In jeder 0 steckt ein False :wink:
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,
)
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.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

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.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
The Spirit
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
Antworten