2015-05-03 17 views

risposta

7

La mia risposta è basata su uno sepolto nel mezzo di some forums. È stato un po 'difficile trovare questa soluzione, ma mi è piaciuto perché ti permette di distribuire la tua applicazione come un singolo script multipiattaforma. Non è necessario eseguirlo tramite py2app o qualcosa di simile, che ti lascerebbe un pacchetto specifico per OS X.

In ogni caso, sto condividendo la mia versione ripulita qui per dargli un po 'più di attenzione, quindi stava arrivando. Dovrai installare pyobjc tramite pip per ottenere il modulo Foundation utilizzato nel codice.

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

ma questo richiede un altro terzo biblioteca di partito. Non c'è modo di farlo all'interno di Tk? – Zizouz212

+1

@ Zizouz212: Ho uno script che installa automaticamente 'pip' e lo usa per installare framework aggiuntivi in ​​fase di runtime. Si tratta di un singolo tentativo per l'utente quando eseguono l'applicazione la prima volta (supponendo che abbiano una connessione Internet). Quindi considero le librerie di terze parti un costo molto basso. Ma se ti piacerebbe farne a meno, immagino che tu possa guardare al sorgente di 'NSBundle' e prendere solo ciò che ti serve da esso e inserirlo direttamente nel tuo codice. – ArtOfWarfare

+1

Ho provato ad installare 'pyobjc' sull'ultimo MBP15 - ci sono voluti circa mezz'ora. Non un'opzione. – Andrei

-1

non possono essere del tutto quello che ti serve, ma mi sorprende che nessuno ha menzionato la piattaforma modo semplice indipendente (funziona con Python 3.x su Win 7):

from tkinter import Tk 

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

e se si vogliono cambiare l'icona:

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

Ho chiesto specificamente su OS X (e voglio una risposta che funzioni su 2.7, anche se questo probabilmente non fa la differenza). Avete effettivamente provato questo su OS X e visto che funziona? Devo supporre che l'ho provato prima di chiedere un anno fa ... In realtà non ho un computer con OS X davanti a me per testarlo adesso. Approfondirò questo più tardi quando avrò la possibilità di provare su un Mac ... – ArtOfWarfare

+0

prova questo codice su OSX con Pyton 2.x da Tkinter import * root = Tk() root.title ("Il tuo titolo qui ") w = Etichetta (root, text =" Ciao, mondo! ") w.pack() root.mainloop() – user1459519

+0

Ripubblicato a causa dello stupido limite di 5 minuti per la modifica dei commenti. Per python 2.x utilizzare "da Tkinter" anziché "da tkinter" (per 3.x). Tkinter/tkinter è progettato per essere compatibile con più piattaforme su almeno Linux, Win e Mac. Prova questo codice su OS X con Python 2.x - è leggermente modificato da [link] (http://effbot.org/tkinterbook/tkinter-hello-tkinter.htm): root = Tk() root.title ("Il tuo titolo qui") w = Label (root, text = "Ciao, mondo") w.pack() radice.mainloop() – user1459519

Problemi correlati