2015-05-03 12 views
8

Gdy tworzysz aplikację z GUI za pomocą Tkintera w Pythonie, nazwa twojej aplikacji pojawia się jako "Python" na pasku menu w OS X. Jak możesz ją uzyskać pojawiają się jako coś innego?Zmień tytuł aplikacji Tkinter w pasku menu OS X

+1

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

Odpowiedz

7

Moja odpowiedź jest oparta na jednym pochowanym w środku some forums. To było trochę trudne do znalezienia tego rozwiązania, ale mi się podobało, ponieważ pozwala ci na dystrybucję twojej aplikacji jako pojedynczego skryptu wieloplatformowego. Nie musisz uruchamiać go za pomocą py2app lub czegoś podobnego, dzięki czemu otrzymasz pakiet specyficzny dla OS X.

W każdym razie, udostępniam tutaj moją wyczyszczoną wersję, aby nadać jej nieco więcej uwagi niż wtedy, gdy do niej dotarłem. Aby uzyskać moduł Foundation używany w kodzie, musisz zainstalować pyobjc przez pip.

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

wymaga to jednak jedna trzecia biblioteka imprezowa. Czy nie ma sposobu, aby to zrobić w Tk? – Zizouz212

+1

@ Zizouz212: Mam skrypt, który automatycznie instaluje 'pip' i używa go do instalowania dodatkowych frameworków w środowisku wykonawczym. Jest to jednorazowe podsumowanie dla użytkownika, który uruchamia aplikację po raz pierwszy (zakładając, że ma połączenie z Internetem). Tak więc uważam biblioteki stron trzecich za bardzo mały koszt. Ale jeśli chciałbyś się obejść bez niego, wyobrażam sobie, że możesz spojrzeć na źródło 'NSBundle' i po prostu wziąć z niego to, czego potrzebujesz i wstawić bezpośrednio do twojego własnego kodu. – ArtOfWarfare

+1

Próbowałem zainstalować 'pyobjc' na najnowszym MBP15 - zajęło to około pół godziny. Nie jest opcją. – Andrei

-1

Może nie całkiem to, czego potrzebujesz, ale jestem zaskoczony, nikt nie wspomniał o prostą, niezależną od platformy sposób (działa z Pythona 3.x na Win 7):

from tkinter import Tk 

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

a jeśli aby zmienić ikonę:

''' 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

Zapytałem konkretnie o OS X (i chcę uzyskać odpowiedź działającą w wersji 2.7, chociaż to prawdopodobnie nie ma znaczenia). Czy próbowałeś tego na OS X i zobaczyłeś, że działa? Muszę założyć, że próbowałem tego przed pytaniem rok temu ... Właściwie nie mam komputera z systemem OS X, aby przetestować go teraz. Zajmę się tym później, gdy będę miał okazję przetestować na komputerze Mac ... – ArtOfWarfare

+0

spróbuj tego kodu na OSX z Pytonem 2.x od Tkinter import * root = Tk() root.title ("Twój tytuł tutaj ") w = Etykieta (root, text =" Hello, world! ") w.pack() root.mainloop() – user1459519

+0

Repostowano z powodu głupiego 5-minutowego limitu edycji komentarzy. Dla Pythona 2.x użyj "z Tkintera" zamiast "z tkintera" (dla 3.x). Tkinter/tkinter ma być kompatybilny z wieloma platformami na co najmniej Linux, Win i Mac. Wypróbuj ten kod na OS X z Pythonem 2.x - jest on nieco zmodyfikowany z [link] (http://effbot.org/tkinterbook/tkinter-hello-tkinter.HTM): root = Tk() root.title ("Twój tytuł tutaj") w = Label (korzeń, text = "Hello, world") w.pack() root.mainloop() – user1459519

Powiązane problemy