2012-04-30 82 views
9

Al ejecutar mi programa, el ícono que configuré con pygame.display.set_icon(icon) solo se muestra en la ventana. En la barra de tareas, el icono predeterminado de Python sigue siendo el mismo.¿Hay alguna manera de establecer el icono de Pygame en la barra de tareas? set_icon() solo parece afectar el icono pequeño en la ventana real

¿Hay alguna manera de cambiar eso?

Fuente:

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 - ¡jaja! Sí ... Vergonzoso, realmente ... Tengo la * derecha * parte del código envuelta ahora ... – Zack

+0

No veo ningún cambio con respecto a las excepciones ... – lunaryorn

+0

@lunaryorn - Me refería a mi máquina local ... ¡Pero el código ahora también está arreglado aquí! – Zack

Respuesta

0

creo que para establecer el icono de la barra tiene que usar set_caption.

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

Nota: Set caption no establece el icono de la ventana. Llame a set_icon y set_caption para establecer ambos.

+0

Acabo de probar esto, pero no tuve mucha suerte. Publiqué la fuente de arriba. Toma el código y no produce errores, pero el mismo icono predeterminado aún se muestra en la barra de tareas. – Zack

+0

@SuperPrograman No veo cómo puede funcionar: del documento: http://www.pygame.org/docs/ref/display.html#pygame.display.set_caption set_caption puede tomar un texto más corto en el título pero no hay un icono directamente – ThePhi

7

Finalmente lo descubrí.

Por lo que puedo decir, la única manera de establecer realmente ese icono en la barra de tareas es durante el empaquetado.

Con pyinstaller por ejemplo, debe llamar al python pyinstaller.py --icon=icon.ico Donde icono es el icono que desea mostrar en la barra de tareas.

+0

Debería haber especificado en su pregunta original que estaba usando un módulo empaquetado de pyinstaller. La respuesta probablemente haya llegado mucho antes. – PenguinCoder

+2

@PenguinCoder en el momento de la escritura original No estaba utilizando el instalador de piroesqueletos. Solo hoy me di cuenta al intentar empaquetar mi programa que la barra de tareas podría establecerse de esta manera. – Zack

2

Es posible que desee ver this. Básicamente, cuando Windows establece el ícono de la barra de tareas, utiliza una variedad de algoritmos inteligentes para decidir qué icono usar. La razón de esto es que si tiene varias instancias de una aplicación (es decir, varias ventanas de Python) se agruparán. Esto generalmente significa que el ícono de una aplicación de Python está configurado en el icono de python.exe o pythonw.exe, dependiendo de su extensión de archivo (.py o .pyw). Sin embargo, hay una solución. Debido a que el icono de la barra de tareas es fijado por App User Models en lugar de por el ejecutable en particular, es posible cambiar de modelo de usuario de la aplicación utilizando el módulo de ctypes:

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

lo que es realmente no tanto de una cosa pygame como una cosa ventanas en general.

Cuestiones relacionadas