14

スタンドアロンの実行可能ファイルを(pyinstallerを使用して)作成するときに.icoファイルを含める必要がないように、Pythonスクリプトにアイコンを埋め込む方法を知っている人はいますか?私はこれがpy2exeで可能であることを知っていますが、私の場合、前者を使用することに成功しなかったので、Pyinstallerを使用する必要があります。私はTkinterを使用しています。

私は知ってiconbitmap(iconName.ico)いますが、1ファイルを実行可能にしたい場合は機能しません。

4

4 に答える 4

16

実際、関数iconbitmapは引数としてファイル名しか受け取れないので、そこにファイルが必要です。リンクをたどってBase64バージョンのアイコン(文字列バージョン)を作成し、ファイルをアップロードして、結果を可変文字列としてソースファイルにコピーできます。それを一時ファイルに抽出し、最後にそのファイルをiconbitmapに渡して削除します。それは非常に簡単です:

import base64
import os
from Tkinter import *
##The Base64 icon version as a string
icon = \
""" REPLACE THIS WITH YOUR BASE64 VERSION OF THE ICON
"""
icondata= base64.b64decode(icon)
## The temp file is icon.ico
tempFile= "icon.ico"
iconfile= open(tempFile,"wb")
## Extract the icon
iconfile.write(icondata)
iconfile.close()
root = Tk()
root.wm_iconbitmap(tempFile)
## Delete the tempfile
os.remove(tempFile)

それが役に立てば幸い!

于 2012-04-15T19:46:38.923 に答える
11

あなたはおそらくこれを必要としないでしょうが、他の誰かがこれが役に立つと思うかもしれません、私はあなたがファイルを作成せずにそれをすることができるとわかりました:

import Tkinter as tk

icon = """
    REPLACE THIS WITH YOUR BASE64 VERSION OF THE ICON
    """

root = tk.Tk()
img = tk.PhotoImage(data=icon)
root.tk.call('wm', 'iconphoto', root._w, img)
于 2014-05-12T18:37:27.723 に答える
4

ALI3Nによるソリューション

次の手順を実行します:

  1. .specファイルを次のように編集します。
a = Analysis(....)
pyz = PYZ(a.pure)
exe = EXE(pyz,
          a.scripts,
          a.binaries + [('your.ico', 'path_to_your.ico', 'DATA')], 
          a.zipfiles,
          a.datas, 
          name=....
       )
  1. これをスクリプトに追加します。
datafile = "your.ico" 
if not hasattr(sys, "frozen"):
    datafile = os.path.join(os.path.dirname(__file__), datafile) 
else:  
    datafile = os.path.join(sys.prefix, datafile)
  1. このように使用します。
root = tk.Tk()
root.iconbitmap(default=datafile)

Pyinstallerを使用してスクリプトをコンパイルした後は、これは機能しないため、次のようになります。

root = tk.Tk()
root.iconbitmap(default="path/to/your.ico")

私の情報:python3.4、pyinstaller3.1.1

于 2017-01-18T15:53:31.493 に答える
0

これは私のために働いた:

from tkinter import  PhotoImage
import base64
img = """
REPLACE THIS WITH YOUR BASE64 VERSION OF THE ICON
"""
img= base64.b64decode(img)

root = Tk()
img=PhotoImage(data=img) 
root.wm_iconphoto(True, img)
于 2018-11-26T13:58:55.920 に答える