Я нашел ответ после некоторого копания.
В Windows 7 панель задач не для «Windows приложений» как таковой, а для «Пользовательских моделей приложений». Например, если у вас запущено несколько разных экземпляров приложения, и у каждого экземпляра есть свой значок, все они будут сгруппированы под одним значком панели задач. Windows использует различные эвристики, чтобы решить, следует ли группировать разные экземпляры, и в этом случае она решила, что все, что размещено в Pythonw.exe, должно быть сгруппировано под значком Pythonw.exe.
Правильное решение для Pythonw.exe - сообщить Windows, что он просто размещает другие приложения. Возможно, будущий выпуск Python сделает это. Кроме того, вы можете добавить раздел реестра, чтобы сообщить Windows, что Pythonw.exe - это просто хост, а не приложение само по себе. См. Документацию MSDN для AppUserModelIDs .
Кроме того, вы можете использовать вызов Windows из Python, чтобы явно указать Windows, какой правильный AppUserModelID предназначен для этого процесса:
import ctypes
myappid = 'mycompany.myproduct.subproduct.version' # arbitrary string
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
РЕДАКТИРОВАТЬ: Пожалуйста, смотрите ответ Ронана: строка myappid должна быть Unicode.