2013-07-05 5 views
6

Ich habe ein Python-Skript, das ich entweder durch Klicken auf etwas oder durch das Löschen einer Datei, die ich öffnen möchte, starten möchte. Ich möchte auch das lästige Mac Python Problem vermeiden, dass der Name des Interpreters (Python) und nicht der Name des Skripts. Ich möchte py2app nicht verwenden, da ich Python nicht bündeln möchte und möchte, dass die Python-Dateien als Textdateien erhalten bleiben. Ich möchte eine reine Python (oder besten Shell-Skript-Lösung.) This zeigt, wie alles zu tun, aber die Drag-and-Drop-Teil; this zeigt, wie man das Gleiche macht, indem man ein Bündel erstellt, mit dem man das Icon steuern kann.Wie erstelle ich auf dem Mac eine Drag & Drop-App für ein Python-Skript, in dem der Skriptname anstelle von Python in der Menüleiste (usw.) angezeigt wird?

Antwort

2

Ich habe eine Antwort auf meine Frage, aber ich hoffe, dass jemand etwas weniger Komplexes finden kann. Die Lösung, die ich mir ausgedacht habe, war ein Python-Skript, um ein AppleScript (ugh!) Zu erstellen, es zu einem Bundle zu kompilieren und dann das Bundle zu ändern, um die erlaubte (n) Dateierweiterung (en), das Icon usw. zu ändern.

Ich habe keine Möglichkeit gefunden, Drag-and-Drop-Funktionen beim Starten eines wxpython-Skripts ohne AppleScript (oder py2app) zu verwenden und ich konnte das AppleScript nicht in einem von mir erstellten Bundle verwenden Verwenden Sie osacompile, um das Paket für mich zu erstellen.

Ich mag besser die Annäherung here oder here, wo man die PLIST-Datei "von Hand" anstatt als eine extern erstellte wie ich hier ändern, aber das Skript unten macht die Arbeit.

Hat jemand eine bessere Möglichkeit, dies ohne Verwendung von py2app zu tun?

2

DnD von Dateien auf das Symbol der Anwendung kann durch Überschreiben der MacOpenFiles-Methode Ihres wx.App-Objekts behandelt werden.

In der Python-Bibliothek in lib/python2.7/plat-mac mit dem Namen gruppebuilder.py ist ein Skript enthalten, das Sie beim Erstellen eines Anwendungspakets unterstützen kann. Es ist von den frühen Tagen von OSX und ist wahrscheinlich in gewisser Hinsicht veraltet, aber es funktionierte das letzte Mal, als ich es versuchte.

+0

Ich bin ein wenig verwirrt darüber. Als ich anfänglich ein Testskript ausprobierte, dachte ich, dass das Überschreiben von MacOpenFiles tun würde, was ich wollte, aber nach der Implementierung in meinem Projekt scheint MacOpenFiles nur auf Dateien reagiert zu haben, die gelöscht wurden, als die Anwendung bereits lief. – bht