2012-04-30 3 views
9

Durante l'esecuzione del mio programma l'icona che ho configurato con pygame.display.set_icon(icon) viene visualizzata solo nella finestra. Nella barra delle applicazioni l'icona python predefinita rimane la stessa.C'è un modo per impostare l'icona Pygame nella barra delle applicazioni? set_icon() sembra solo influenzare l'icona piccola nella finestra effettiva

C'è un modo per cambiare la situazione?

Fonte:

import pygame 
from pygame.locals import * 
import sys, os 
import time 

pygame.init() 


# Load Images 
try: 
    bg = os.getcwd() + '\\images\\background.png' 
    background = pygame.image.load(bg).convert() 
except: 
    print 'Error: Could not find background.png' 

try: 
    logo = os.getcwd() + '\\images\\logo.png' 
    c_logo = pygame.image.load(logo).convert() 
except: 
    print 'Error: Could not find logo.png' 

try: 
    about_dialog_infile = os.getcwd() + '\\images\\about_dialog[alpha].png' 
    about_dialog = pygame.image.load(about_dialog_infile).convert_alpha() 
except: 
    pass 

i_icon = os.getcwd() + '\\images\\icon.png' 
icon = pygame.image.load(i_icon) 
pygame.display.set_icon(icon) 
pygame.display.set_caption("Test program") 
screenSize =(640,480) 

screen = pygame.display.set_mode(screenSize,0,32) 
pygame.display.set_caption('My Test Program') 



while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      # sys.exit() 
     if event.type == MOUSEBUTTONDOWN: 
      check_click(about, event.pos) 


screen.blit(background, (0,0)) 

pygame.display.update() 
+0

@lunaryorn - haha! Sì .. Imbarazzante, davvero ... Ho la * giusta * parte del codice ora imballata .. – Zack

+0

Non vedo alcuna modifica riguardante le eccezioni ... – lunaryorn

+0

@lunaryorn - Mi riferivo al mio macchina locale .. Ma ora il codice è stato risolto anche qui! – Zack

risposta

0

penso che per impostare la barra delle applicazioni è necessario utilizzare set_caption.

pygame.display.set_caption("Title", get_image_file("icon.png")) 

Nota: imposta didascalia non imposta l'icona della finestra. Chiama sia set_icon che set_caption per impostare entrambi.

+0

Ho appena provato questo, ma non ho avuto molta fortuna. Ho pubblicato la fonte sopra. Prende il codice e non produce errori, ma la stessa icona predefinita viene ancora visualizzata nella barra delle applicazioni. – Zack

+0

@SuperPrograman Non vedo come funzioni: dal doc: http://www.pygame.org/docs/ref/display.html#pygame.display.set_caption set_caption è possibile prendere un testo più breve nella didascalia ma nessuna icona direttamente. – ThePhi

7

Ho finalmente capito.

Per quanto posso dire, l'unico modo per impostare in realtà che l'icona nella barra delle applicazioni è in fase di confezionamento.

Con pyinstaller per esempio, si potrebbe chiamare python pyinstaller.py --icon=icon.ico Dove icona è l'icona che si desidera visualizzare nella barra delle applicazioni.

+0

Dovresti aver specificato nella tua domanda originale che tu stia usando un modulo pacchettizzato pyinstaller. La risposta sarebbe probabilmente arrivata molto prima. – PenguinCoder

+2

@PenguinCoder al momento della scrittura originale non stavo usando pyinstaller. Ho realizzato oggi solo mentre provavo a pacchetto il mio programma che la barra delle applicazioni poteva essere impostata in questo modo. – Zack

2

Si potrebbe desiderare di vedere this. In sostanza, quando Windows imposta l'icona della barra delle applicazioni, utilizza una serie di algoritmi intelligenti per decidere l'icona da utilizzare. La ragione di ciò è che se si hanno più istanze di un'applicazione (ad esempio più finestre Python), queste verranno raggruppate. Questo in genere significa che l'icona di un'applicazione pitone è impostato per l'icona della python.exe o pythonw.exe, a seconda della estensione del file (o .py.pyw). C'è, tuttavia, una soluzione alternativa. Perché l'icona sulla barra delle applicazioni è impostata dal App User Models piuttosto che l'eseguibile specifico, è possibile cambiare dell'applicazione Modello utente utilizzando il modulo ctypes:

import ctypes 
myappid = 'mycompany.myproduct.subproduct.version' # arbitrary string 
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid) 

quindi è davvero non tanto di una cosa Pygame come una cosa di Windows generalmente.