2012-04-30 4 views
9

При запуске моей программы значок, который я настроил с pygame.display.set_icon(icon), отображается только в окне. На панели задач значок python по умолчанию остается прежним.Есть ли способ установить значок Pygame на панели задач? set_icon() только влияет на маленький значок в фактическом окне

Есть ли способ изменить это?

Источник:

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! Да ... Смущающе, действительно ... У меня есть * правая * часть кода, завернутая сейчас. – Zack

+0

Я не вижу никаких изменений в отношении исключений ... – lunaryorn

+0

@ lunaryorn - Я имел в виду мой локальный компьютер .. Но теперь код тоже исправлен! – Zack

ответ

0

Я думаю, чтобы установить значок с панели задач, вы должны использовать set_caption.

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

Примечание: установка заголовка не устанавливает значок окна. Вызовите оба set_icon и set_caption для установки обоих.

+0

Я только что проверил это, но не имел большой удачи. Я разместил источник выше. Он принимает код и не производит ошибок, но тот же значок по умолчанию все еще отображается на панели задач. – Zack

+0

@SuperPrograman Я не вижу, как это может работать: из документа: http://www.pygame.org/docs/ref/display.html#pygame.display.set_caption set_caption может взять более короткий текст в заголовке, но нет прямого значка. – ThePhi

7

Я, наконец, понял это.

Насколько я могу судить, единственный способ установить этот значок на панели задач во время упаковки.

С помощью pyinstaller, например, вы бы назвали python pyinstaller.py --icon=icon.ico Где значок - это значок, который вы хотите отобразить на панели задач.

+0

Вы должны указать в своем первоначальном вопросе, что вы используете модуль с пакетом pyinstaller. Ответ скорее всего пройдет намного раньше. – PenguinCoder

+2

@PenguinCoder на момент написания оригинала Я не использовал pyinstaller. Я понял только сегодня, пытаясь упаковать свою программу, чтобы панель задач могла быть установлена ​​таким образом. – Zack

2

Возможно, вы захотите увидеть this. По сути, когда окна устанавливают значок панели задач, он использует множество умных алгоритмов, чтобы решить использовать значок. Причина этого в том, что если у вас несколько экземпляров приложения (например, несколько окон python), они будут сгруппированы. Обычно это означает, что значок приложения python установлен на значок python.exe или pythonw.exe, в зависимости от расширения вашего файла (.py или .pyw). Однако есть обходной путь. Поскольку значок на панель задач устанавливаются App User Models, а не конкретный исполняемым файлом, можно изменить свое приложение пользователя модель с использованием ctypes модуля:

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

Так что это на самом деле не так много из Pygame вещей как окна вещи в общем.

Смежные вопросы