2015-05-03 7 views
8

Wenn Sie eine Anwendung mit einer grafischen Benutzeroberfläche mit Tkinter in Python zu erstellen, wird der Name der Anwendung als „Python“ in der Menüleiste auf OS X. Wie können Sie es zu als etwas anderes erscheinen?ändert Titel Tkinter Anwendung in OS X Menüleiste

+1

Verwandte http://stackoverflow.com/questions/8695926/remove-default-python-submenu-with-tkinter-menu-on-mac-osx – Andrei

Antwort

7

Meine Antwort basiert auf einem in der Mitte des some forums begraben. Es war ein bisschen schwierig, diese Lösung zu finden, aber mir hat es gefallen, weil es Ihnen erlaubt, Ihre Anwendung als einzelnes plattformübergreifendes Skript zu verteilen. Es ist nicht notwendig, es über py2app oder etwas Ähnliches auszuführen, wodurch Sie ein OS X-spezifisches Paket erhalten.

Anyways, ich meine aufgeräumt Version teilen hier ist es ein bisschen mehr Aufmerksamkeit zu schenken, dann wurde sie dorthin zu gelangen. Sie müssen pyobjc über pip installieren, um das im Code verwendete Modul Foundation zu erhalten.

from sys import platform 

# Check if we're on OS X, first. 
if platform == 'darwin': 
    from Foundation import NSBundle 
    bundle = NSBundle.mainBundle() 
    if bundle: 
     info = bundle.localizedInfoDictionary() or bundle.infoDictionary() 
     if info and info['CFBundleName'] == 'Python': 
      info['CFBundleName'] = <Your application name here> 
+4

Aber dies erfordert ein weiteres Drittel Party-Bibliothek. Gibt es keine Möglichkeit, dies in Tk zu tun? – Zizouz212

+1

@ Zizouz212: Ich habe ein Skript, das 'pip' automatisch installiert und es verwendet, um zusätzliche Frameworks zur Laufzeit zu installieren. Es ist ein One-Time-Hick-up für den Benutzer, wenn sie Ihre Anwendung das erste Mal ausführen (vorausgesetzt, sie haben eine Internetverbindung). Daher betrachte ich Bibliotheken von Drittanbietern als sehr kleine Kosten. Aber wenn Sie ohne es gehen möchten, würde ich mir vorstellen, dass Sie die Quelle für "NSBundle" betrachten können und nehmen Sie einfach, was Sie brauchen, und fügen Sie es direkt in Ihren eigenen Code ein. – ArtOfWarfare

+1

Versucht, 'pyobjc' auf dem neuesten MBP15 zu installieren - es dauerte ungefähr eine halbe Stunde. Keine Option. – Andrei

-1

Darf nicht ganz, was Sie brauchen, aber ich bin niemand überrascht, die einfach erwähnt, plattformunabhängige Art und Weise (funktioniert mit Python 3.x auf Win 7):

from tkinter import Tk 

root = Tk() 
root.title("Your title here") # or root.wm_title 

und wenn Sie will das Symbol ändern:

''' Replace the default "Tk" icon with an Application-specific icon ''' 
''' (that is located in the same folder as the python source code). ''' 

import sys 
from tkinter import PhotoImage 

program_directory = sys.path[ 0 ] 

IconFile = os.path.join(program_directory) + "\ApplicationIcon.gif" 
IconImage = PhotoImage(file = IconFile) 

root.tk.call('wm', 'iconphoto', root._w, IconImage) 

root.mainloop() 
+1

Ich fragte speziell nach OS X (und möchte eine Antwort, die auf 2.7 funktioniert, obwohl das wahrscheinlich keinen Unterschied macht.) Haben Sie das tatsächlich auf OS X versucht und gesehen, dass es funktioniert? Ich muss annehmen, dass ich das probiert habe, bevor ich vor einem Jahr gefragt habe ... Ich habe eigentlich keinen Computer, auf dem OS X läuft, mit dem ich gerade testen kann. Ich werde später darüber nachdenken, wenn ich eine Chance habe, auf einem Mac zu testen ... – ArtOfWarfare

+0

versuchen Sie diesen Code auf OSX mit Pyton 2.x von Tkinter import * root = Tk() root.title ("Ihr Titel hier ") w = Label (root, text =" Hallo, Welt! ") w.pack() root.mainloop() – user1459519

+0

Repotiert wegen dummer 5-Minuten-Grenze beim Bearbeiten von Kommentaren. Für Python 2.x verwende "from Tkinter" statt "from tkinter" (für 3.x). Tkinter/tkinter ist auf mindestens Linux, Win und Mac plattformübergreifend kompatibel. Versuchen Sie diesen Code auf OS X mit Python 2.x - es ist leicht modifiziert von [link] (http://effbot.org/tkinterbook/tkinter-hello-tkinter.htm): root = Tk() root.title ("Ihr Titel hier") w = Beschriftung (root, text = "Hallo Welt!") w.pack() root.mainloop() – user1459519