私は次のようにアプリケーションアイコン(python3/tkinter)を設定しようとしています:
Interface()
root.title("Quicklist Editor")
root.iconbitmap('@/home/jacob/.icons/qle_icon.ico')
root.resizable(0, 0)
root.mainloop()
何をしても、次のようなエラーメッセージ(アイドル)が表示され続けます。
return self.tk.call('wm', 'iconbitmap', self._w, bitmap)
_tkinter.TclError: error reading bitmap file "/home/jacob/.icons/qle_icon.ico"
何が悪いのですか?
問題はコードではなく、アイコンです。 Gimp(一部のKDEアイコンエディター)以外のプログラムを使用してxbm
を作成しようとしましたが、恐ろしく醜く見えますが、アイコンは表示されます。私のPythonプログラムに「理解できる」アイコンを与えるクリエイターを見つける必要があると思います。
iconbitmap
メソッドは白黒のみであることが判明したため、結局役に立たなかった。
長い検索の結果、Python 3(Linuxの場合)のアプリケーションのアイコンの色を設定する解決策が見つかりました。見つかりました here :
root = Tk()
img = PhotoImage(file='your-icon')
root.tk.call('wm', 'iconphoto', root._w, img)
これは古い質問であり、Webには多くのことが書かれていますが、すべて正しくないか不完全なため、実際に機能するようになったら、実際に機能するコードをここに記録しておくとよいと思いました。
まず、アイコンを作成し、Windows「ico」とUnix「xbm」の2つの形式で保存する必要があります。 64 x 64が適切なサイズです。 XBMは1ビット形式です。ピクセルはオンまたはオフなので、色もグレーもありません。すべてのLinuxデスクトップが実際のアイコンをサポートしているにもかかわらず、tkinterのLinux実装はXBMのみを受け入れます。そのため、そこには運がありません。また、XBM仕様では、「オン」ビットが黒と白のどちらを表すかが不明確であるため、一部のデスクトップではXBMを反転する必要がある場合があります。 Gimpはこれらを作成するのに適しています。
次に、アイコンをタイトルバーに配置するには、次のコード(Python 3)を使用します。
import os
from tkinter import *
from tkinter.ttk import *
root = Tk()
root.title("My Application")
if "nt" == os.name:
root.wm_iconbitmap(bitmap = "myicon.ico")
else:
root.wm_iconbitmap(bitmap = "@myicon.xbm")
root.mainloop()
私はこれを試しましたが、Windows 7を使用して動作させることができませんでした。
修正を見つけました。
ジェイコブの答えを使用しますが、ファイルは.gif
私のOSを使用している場合(Windows 7)が表示されます。
MSペイントを使用して64x64 gifを作成し、保存して、ファイルパスとビンゴを使用して、機能します。
これにより、PNGファイルをアイコンとして使用できるようになり、色がレンダリングされます。 Xubuntu 14.04、32ビットでPython 3.4(root
はTk
オブジェクトです)でテストしました:
import sys, os
program_directory=sys.path[0]
root.iconphoto(True, PhotoImage(file=os.path.join(program_directory, "test.png")))
(すべてのコンテキストで同じ場所でtest.png
を検索するには、プログラムディレクトリを見つけることが重要です。os.path.join
は、test.png
をプログラムディレクトリに追加するクロスプラットフォームの方法です。)
TrueをFalseに変更すると、メインアイコンではないウィンドウに同じアイコンが使用されなくなります。
これがWindowsとMacで動作するかどうか教えてください。
これがクロスプラットフォーム能力の助けになることを願っています
LOGO_PATH="pic/logo.ico"
LOGO_LINUX_PATH="@pic/logo_1.xbm" #do not forget "@" symbol and .xbm format for Ubuntu
root = Tk()
if detect_screen_size().detect_os()=="Linux":
root.iconbitmap(LOGO_LINUX_PATH)
else:
root.iconbitmap(LOGO_PATH)