2012-03-29 19 views
5

क्या कोई पाइथन लिपि में एक आइकन एम्बेड करने का तरीका जानता है जैसे कि जब मैं अपना स्टैंडअलोन निष्पादन योग्य (pyinstaller का उपयोग कर) बनाता हूं तो मुझे .ico फ़ाइल को शामिल करने की आवश्यकता नहीं है? मुझे पता है कि यह py2exe के साथ संभव है, लेकिन मेरे मामले में मुझे Pyinstaller का उपयोग करना होगा, क्योंकि मैं पूर्व का उपयोग करके सफल नहीं था। मैं टिंकर का उपयोग कर रहा हूँ।पायथन लिपि में एम्बेड आइकन

मुझे iconbitmap(iconName.ico) के बारे में पता है, लेकिन अगर मैं एक फ़ाइल निष्पादन योग्य बनाना चाहता हूं तो यह काम नहीं करता है।

+0

बस इसे स्पष्ट करने के: मैं अपने अनुप्रयोग विंडो (जो डिफ़ॉल्ट रूप से टी लोगो है) के आइकन को बदलना चाहते हैं, के आइकन नहीं मेरी फ़ाइल (जिसे आसानी से पाइंस्टॉलर के साथ किया जा सकता है) – maupertius

+0

आह! थोड़ा और गुगल करने के बाद मुझे स्टैक ओवरफ्लो [यहां] (http://stackoverflow.com/a/7675014/404469) पर एक जवाब मिला। क्या उससे मदद हुई? – gary

+0

हाँ मैंने इसे पहले देखा है। यह बिल्कुल वही समस्या है। मैं समझ में नहीं आता कि वह वहां क्या करता है। ऐसा लगता है कि यह सही समाधान है, शायद मुझे थोड़ा और खोदना चाहिए। धन्यवाद! – maupertius

उत्तर

6

असल में फ़ंक्शन 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) 

उम्मीद है कि यह मदद करता है!

+0

बहुत बहुत धन्यवाद, जो खूबसूरती से काम किया! क्या आप किसी भी मौके से जानते हैं कि Matplotlib के साथ बनाई गई आकृति विंडो में आइकन कैसे बदलें? मेरे आवेदन को अब मेरा आइकन मिला है, लेकिन जब मैं ग्राफ को साजिश करता हूं, तो नई विंडो में अभी भी टीके लोगो आइकन के रूप में होता है। कई लोग आपकी मदद के लिए सोचते हैं – maupertius

+0

क्षमा करें, मुझे Matplotlib के बारे में पता नहीं है, लेकिन यदि आइकन बदलने के लिए कोई फ़ंक्शन नहीं है, तो मुझे नहीं लगता कि एक तरीका है। Matplotlib में wm_iconbitmap काम नहीं करता है? – Saulpila

5

आप शायद मैं तुम्हें एक फ़ाइल बनाने के बिना यह कर सकते हैं पाया, लेकिन किसी और को इस की जरूरत नहीं है इस उपयोगी लग सकते,:

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) 
+0

http://code.activestate.com/recipes/52264-inline-gifs-with-tkinter/ – Sam

+0

मैं वास्तव में पाइथन 3.4 में किसी आइकन के साथ काम करने के लिए इस विधि या सैम की विधि प्राप्त करने में सक्षम नहीं था।3 लेकिन शाऊलपिला की विधि ने काम किया ताकि मुझे पता चले कि बेस 64 कोड में कोई त्रुटि नहीं है। – zfb

0

ALI3N द्वारा समाधान

इन चरणों का पालन करें: इस तरह से अपनी .spec फ़ाइल

  1. संपादित करें:
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) 

क्योंकि यह आपके स्क्रिप्ट को पाइइंस्टॉलर के साथ संकलित करने के बाद काम नहीं करेगा:

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

मेरी जानकारी: python3.4, pyinstaller3.1.1

+0

मुझे त्रुटि मिल रही है: सिंटेक्स त्रुटि: (यूनिकोड त्रुटि) 'यूनिकोडेस्केप' कोडेक स्थिति में बाइट डीकोड नहीं कर सकता 2-3: छोटा \ UXXXXXXXX भागना – alienware13user

संबंधित मुद्दे