MacOS用のtkアプリケーションに表示されるアイコンを変更しようとしています。このコードを最後にチェックしたときは、Windowsで機能しました。目標は、このソリューションがすべてのプラットフォームで機能することです。
root = tk.Tk()
app = Application(master=root)
app.master.iconbitmap("my_icon.ico")
app.mainloop()
コードは、私が意図したものではない.pdfファイルのデフォルトアイコンを追加しています。 my_icon.ico
へのパスは正しいです。なぜこれがMacOSで機能しないのですか?クロスプラットフォームで機能する究極のソリューションはありますか?
_tk tcl
_のドキュメントによると、_wm iconphoto
_を試してみることをお勧めします。 OSXをサポートしているようで、MACでスムーズにレンダリングするためにファイルを512x512前後に設定することにも言及しています。
私はMACを持っていないので、これをテストすることはできませんが、これを試してみて、役に立ったかどうか教えてください。
更新:
@ l'L'lが指摘したように、root.iconphoto(True, img)
を試してみることをお勧めします。 Macがないため、自分でテストすることはできません。
_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()
_
これが ここのドキュメント からの関連テキストです:
wm iconphotoウィンドウ?-デフォルト? image1?image2 ...?名前付きの写真画像に基づいてウィンドウのタイトルバーアイコンを設定します。 -defaultが指定されている場合、これは将来作成されるすべてのトップレベルにも適用されます。画像内のデータは、呼び出し時にスナップショットとして取得されます。画像が後で変更された場合、これはタイトルバーアイコンに反映されません。さまざまな画像サイズ(16x16や32x32など)を提供できるように、複数の画像を使用できます。ウィンドウマネージャは、提供されたアイコンを適切なサイズに拡大縮小できます。 Windowsでは、画像はWindowsアイコン構造にパックされます。これにより、wm iconbitmapに指定されたicoが上書きされ、その逆も同様です。
Xでは、画像は_NET_WM_ICON Xプロパティに配置されます。これは、最新のウィンドウマネージャーのほとんどがサポートしています。 wmアイコンビットマップが同時に存在する場合があります。大きい方のアイコンを最初に配置して、2つ以下のアイコンを使用することをお勧めします。
Macintoshでは、呼び出された最初の画像はOSXネイティブのアイコン形式で読み込まれ、ダイアログ、Dock、およびその他のコンテキストでアプリケーションアイコンになります。スクリプトレベルでは、macOSでの複数のサイズ/解像度のサポートはTkの範囲外であるため、コマンドはパラメーターで渡された最初の画像のみを受け入れます。開発者は、Macでスムーズにレンダリングできるように、サポートできる最大のアイコン(できれば512ピクセル)を使用する必要があります。
私はこれをWindowsでテストして、少なくともそこで機能することを確認しました。青い正方形の画像を使用してテストしました。
上記のドキュメントが正確であれば、MACでも機能するはずです。
重要な注意:この方法は長く、手元のタスクには多くの作業が必要です。ただし、いくつかの無関係な利点があります。より良い方法があるかもしれませんが、これは機能することに注意してください。
とにかく、先に進みます..。
Py2appを使用できます。
Py2app
はプログラムを.app
に変換します。つまり、アプリケーションとして実行されます(そうであるため)。 tkinter
を使用する場合、GUIは通常、使いやすさのためにアプリに変換されるため、これは通常、最終的に必要なものです。 py2appのドキュメント ここ を読むか、非公式だが理解しやすい(私の意見では)チュートリアル ここ を読むことができます。また、プロセスの実行方法についても要約します。
最初のインストールpy2app
:コマンドプロンプトにこれを入力します:
Sudo pip install -U py2app
成功した場合は、py2app
を取得する必要があります。そうでない場合、1つの問題はpip
がないことである可能性があります。別のコマンドでダウンロードできます。
Sudo easy_install pip
ステップ1:プログラムと同じ辞書にsetup.py
というファイルを作成します。
ステップ2:これをファイルに入れます。
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'],
)
ステップ3:次に、ファイルが含まれている辞書でbashターミナルを開き、次のコマンドを入力します。
python setup.py py2app -A
-A
を使用すると、アプリはコードの更新に応答しますが、アプリは共有できなくなります。開発が完了したら、次のように、今度は-A
なしでコマンドを再実行します。
python setup.py py2app
注:python 3 py2appの場合、python3 setup.py py2...
の代わりにコマンドpython setup.py py2...
を使用する必要がある場合があります。
ステップ4:the dictionary your code is in/dist
に移動します。そのフォルダにあなたのアプリがあります。 (コマンドを実行したときに、ステップ3でdist
フォルダーが作成されているはずです)
Windowsユーザーの場合:py2appは使用すべきものではなく、代わりに py2exe を使用してください。
Mac OSを使用している場合は、.icoイメージの代わりに.icnsイメージを使用する必要があります。
使用できます:
from tkinter import Tk
from platform import system
platformD = system()
if platformD == 'Darwin':
logo_image = 'images/logo.icns'
Elif platformD == 'Windows':
logo_image = 'images/logo.ico'
else:
logo_image = 'images/logo.xbm'
root = Tk()
root.title("My App")
root.iconbitmap(logo_image)
root.resizable(0, 0)
root.mainloop()