it-swarm.com.de

Stellen Sie das Tkinter-Symbol unter Mac OS ein

Ich versuche, das Symbol zu ändern, das in meiner Tk-Anwendung für Mac OS angezeigt wird. Das letzte Mal habe ich diesen Code für Windows überprüft. Das Ziel ist, dass diese Lösung auf allen Plattformen funktioniert.

root = tk.Tk()
app = Application(master=root)

app.master.iconbitmap("my_icon.ico")

app.mainloop()

Der Code fügt das Standardsymbol für eine .pdf-Datei hinzu, was nicht beabsichtigt ist. Der Pfad zum my_icon.ico ist korrekt. Warum funktioniert das nicht für Mac OS? Gibt es eine ultimative Lösung, die plattformübergreifend funktioniert?

7
Jake

Entsprechend der tk tcl-Dokumentation können Sie wm iconphoto ausprobieren. Es scheint, dass es OSX unterstützt, und es erwähnt auch, dass die Datei auf 512x512 eingestellt wird, um ein reibungsloses Rendern in MAC zu ermöglichen.

Ich habe keinen MAC, also kann ich das nicht testen, aber probieren Sie es aus und lassen Sie mich wissen, ob es geholfen hat.

Aktualisieren:

Wie @ l'L'l hervorgehoben hat, möchten Sie vielleicht root.iconphoto(True, img) versuchen. Ich kann es nicht selbst testen, weil ich keinen Mac habe.

import tkinter as tk

root = tk.Tk()
img = tk.Image("photo", file="icon.gif")
# root.iconphoto(True, img) # you may also want to try this.
root.tk.call('wm','iconphoto', root._w, img)

root.mainloop()

Hier ist der relevante Text aus der Dokumentation hier :

wm iconphoto window? -default? image1? image2 ...? Legt das Symbol für die Titelleiste Für das Fenster fest, das auf den genannten Fotobildern basiert. Wenn -default Angegeben ist, wird dies auch auf alle zukünftig erstellten Toplevels angewendet. Die Daten in den Bildern werden zum Zeitpunkt des Aufrufs von Als Momentaufnahme verwendet. Wenn die Bilder später geändert werden, wird dies nicht in Der Titelleistensymbole angezeigt. Es werden mehrere Bilder akzeptiert, damit unterschiedliche - Bildgrößen (z. B. 16 × 16 und 32 × 32) bereitgestellt werden können. Der Manager des Fensters Kann bereitgestellte Symbole auf eine geeignete Größe skalieren. Unter Windows Werden die Bilder in eine Windows-Symbolstruktur gepackt. Dies überschreibt Ein ico, das für wm iconbitmap angegeben ist, und umgekehrt.

Auf X werden die Bilder in der _NET_WM_ICON X-Eigenschaft angeordnet, die von den meisten modernen Fenstermanagern Unterstützt wird. Eine wm iconbitmap kann gleichzeitig Vorhanden sein. Es wird empfohlen, nicht mehr als zwei Symbole zu verwenden, , Wobei das größere Symbol zuerst platziert wird.

Unter Macintosh wird das erste aufgerufene Bild in ein OSX-natives Symbol Geladen und wird zum Anwendungssymbol in Dialogen, im Dock und in anderen Kontexten. Auf Skriptebene akzeptiert der Befehl nur das erste - Bild, das in den Parametern als Unterstützung für mehrere Größen/Auflösungen auf macOS übergeben wird, außerhalb des Bereichs von Tk. Entwickler sollten Das größte Symbol verwenden, das sie unterstützen können (vorzugsweise 512 Pixel), um Für ein reibungsloses Rendern auf dem Mac zu sorgen.

Ich habe dies unter Windows getestet, um sicherzustellen, dass es dort zumindest funktioniert. Zum Testen habe ich ein blaues Quadrat verwendet.

Wenn die obigen Dokumentationen korrekt sind, sollte sie auch unter MAC funktionieren.

 enter image description here

3
Mike - SMT

Wichtiger Hinweis: Diese Methode ist lang und für die anstehende Aufgabe viel Arbeit. Es hat jedoch einige nicht verwandte Vorteile. Beachten Sie, dass es möglicherweise einen besseren Weg gibt, aber das wird funktionieren.
Wie auch immer, geht weiter ....

Sie können py2app verwenden.

Py2app verwandelt Ihr Programm in einen .app, dh es wird als Anwendung ausgeführt (weil es ist). Wenn Sie tkinter verwenden, ist dies normalerweise das, was Sie am Ende wollen, da GUIs zur Vereinfachung der Verwendung in Apps umgewandelt werden. Sie können die py2app-Dokumentation hier lesen, oder ein nicht-offizielles, aber (meiner Meinung nach) verständlicheres Tutorial hier lesen. Ich werde auch zusammenfassen, wie der Prozess durchgeführt wird.

Installieren Sie zuerst py2app: Geben Sie dies in den Befehl Eingabeaufforderung ein:

Sudo pip install -U py2app

Wenn erfolgreich, sollten Sie py2app. Erhalten. Wenn nicht, besteht ein Problem möglicherweise darin, dass Sie pip nicht haben. Sie können es mit einem anderen Befehl herunterladen:

Sudo easy_install pip

Schritt eins: Erstellen Sie eine Datei mit dem Namen setup.py im selben Wörterbuch Wie das Programm.

Schritt zwei: Legen Sie dies in die Datei.

from setuptools import setup

#APP would be the name of the file your code is in.
APP = ['example.py']
DATA_FILES = []
#The Magic is in OPTIONS.
OPTIONS = {
    'argv_emulation': False,
    'iconfile': 'app.icns', #change app.icns to the image file name!!!
    }

setup(
    app=APP,
    name='Your app’s name', #change to anything
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

Schritt 3: Öffnen Sie dann das Bash-Terminal im Wörterbuch, in dem sich die Datei befindet, und geben Sie den folgenden Befehl ein:

python setup.py py2app -A

Der -A bewirkt, dass die App auf Aktualisierungen im Code reagiert, die App jedoch nicht gemeinsam nutzbar ist. Wenn Sie mit dem Entwickeln fertig sind, führen Sie den Befehl erneut aus, diesmal ohne den -A:

python setup.py py2app

Hinweis: Möglicherweise müssen Sie für eine Python 3 py2app den Befehl python3 setup.py py2... anstelle von python setup.py py2... verwenden.

Schritt 4: Navigieren Sie zu the dictionary your code is in/dist. In diesem Ordner befindet sich Ihre App. (Der dist-Ordner sollte bei Ausführung des Befehls in Schritt 3 erstellt worden sein.)

Für Windows-Benutzer: py2app sollte nicht verwendet werden. Verwenden Sie stattdessen py2exe .

1
Ethan K888