2010-11-18 14 views
1

Sonunda py2exe kullanarak bir exe içine derlenecek Tkinter kullanarak bir program yazıyorum. Pencerelerde kullanmak için onunla bir simge eklemek istiyorum. Exe için ikon olarak paketlenmiş olanla aynı olacak. Tkinter'de, exe dosyasını bularak veya dosya benzeri bir nesne kullanarak simgeyi eklemenin bir yolu var mı? Win32api'nin çalışmakta olan exe dosyasını bulabileceğini biliyorum, ama py2exe'nin orijinal dosyayı geçici olarak ayıkladığını ve ardından çalıştırdığını, böylece orijinal exe'nin bu şekilde bulunamayacağına inanıyorum. Ayrıca bir include klasörüne koymayı düşündüm, ama cwd'nin bunun için doğru şekilde ayarlanıp ayarlanmadığını bilmiyorum. Yardımlarınız için şimdiden teşekkürler!Tk() için nesneler gibi dosya kullan iconbitmap()

Sen icon_resources seçeneğiyle py2exe'yi ikili simgeyi embedd olabilir

cevap

3

Tk görüntüleri kod içindeki görüntüyü gömmek sağlayan bir -data seçeneği var yardımcı olur. Sadece görüntüyü 64 kodlamak zorundasınız. Görüntünün orijinal olarak GIF formatında olması gerektiğini düşünüyorum.

import Tkinter as tk 
root = tk.Tk() 
data = '''R0lGODlhIAAgALMAAAAAAAAAgHCAkC6LV76+vvXeswD/ANzc3DLNMubm+v/6zS9P 
      T6Ai8P8A/////////yH5BAEAAAkALAAAAAAgACAAAAS00MlJq7046803AF3ofAYY 
      fh8GIEvpoUZcmtOKAO5rLMva0rYVKqX5IEq3XDAZo1GGiOhw5rtJc09cVGo7orYw 
      YtYo3d4+DBxJWuSCAQ30+vNTGcxnOIARj3eTYhJDQ3woDGl7foNiKBV7aYeEkHEi 
      gnKFkk4ciYaImJqbkZ+PjZUjaJOElKanqJyRrJyZgSKkokOsNYa2q7mcirC5I5Fo 
      fsK6hcHHgsSgx4a9yzXK0rrV19gRADs= 
     ''' 
img = tk.PhotoImage(data=data) 
label = tk.Label(image=img) 
label.pack() 
root.mainloop() 
+2

ama sonra pencere simgesi olarak kullanmak nasıl: Burada

çalışan bir örnektir? Dosya adını istiyor. Onu geçici bir dizine kaydetmeli ve oradan yüklemeliyim. Photoimage'i iconbitmap için bir özellik olarak kullanmak için api olması gerektiği anlaşılıyor. –

2

Sonra
setup(windows=[ 
    {'script':'toto.py', "icon_resources": [(1, "toto.ico")]}, 
    ], 

Eğer pencere API ile

import win32gui, win32api, win32con 
from ctypes import c_int, windll 

hicon = win32gui.CreateIconFromResource(win32api.LoadResource(None, win32con.RT_ICON, 13), True) 

geri almak ve sonra senin kadar uzun bir pencereye ekleyebilirsiniz HWND'yi tanıyor.

windll.user32.SendMessageA(c_int(hwnd), c_int(win32con.WM_SETICON), c_int(win32con.ICON_SMALL), c_int(hicon)) 

LoadResource kullanılan 13 sabit

ResourceHacker gibi bir araç ile alınabilir edilmiştir. ResourceHacker'da, simgenin klasör adına karşılık gelir. Py2exe tarafından nasıl hesaplandığını ve bu değeri zorlamak için bir yol olup olmadığını bilmiyorum. Orada bunu yapmak için saf Tkinter yoludur ve simge kullanılıp kullanılamayacağını bir Tkinter penceresinde as-olup olmadığını da bilmiyorum

.

Ben

İlgili konular