qt - quitar - Cómo establecer el icono de la barra de tareas de la aplicación en Windows 7
como quitar iconos dela barra de tareas en windows 7 (3)
Debe establecer AppUserModelID antes de que su aplicación muestre cualquier GUI. Si necesita acceder a otras características de Windows 7, puede echarle un vistazo a Q7Goodies que es un complemento de Qt para Windows 7 con enlaces PyQt.
¿Cómo configuro el icono de la barra de tareas de una aplicación en PyQt4?
He intentado setWindowIcon, y se establece con éxito el icono en la parte superior izquierda de la ventana principal, pero no afecta el icono que se muestra en la barra de tareas de Windows 7 - el icono de la barra de tareas sigue siendo el icono python de Python predeterminado. Aquí está mi código:
from PyQt4 import QtGui
app = QtGui.QApplication([])
mainwindow = QtGui.QMainWindow()
mainwindow.show()
app.setWindowIcon(QtGui.QIcon(''chalk.ico''))
mainwindow.setWindowIcon(QtGui.QIcon(''chalk.ico''))
app.exec_()
[actualización] He intentado colocar el setWindowIcon()
antes del show()
. Lo he intentado con otras imágenes, ico y png. Nada ayuda.
Encontré la respuesta después de cavar.
En Windows 7, la barra de tareas no es para "Windows de aplicación" per se, es para "Modelos de usuario de aplicación". Por ejemplo, si tiene varias instancias diferentes de su aplicación ejecutándose, y cada instancia tiene su propio ícono, entonces todas se agruparán bajo un solo icono de la barra de tareas. Windows usa varias heurísticas para decidir si las diferentes instancias deben agruparse o no, y en este caso decidió que todo alojado por Pythonw.exe debería agruparse bajo el icono de Pythonw.exe.
La solución correcta es que Pythonw.exe le diga a Windows que simplemente aloja otras aplicaciones. Quizás un lanzamiento futuro de Python hará esto. De forma alternativa, puede agregar una clave de registro para decirle a Windows que Pythonw.exe es solo un host en lugar de una aplicación en sí misma. Consulte la documentación de MSDN para AppUserModelIDs .
Alternativamente, puede usar una llamada de Windows desde Python para decirle explícitamente a Windows cuál es el AppUserModelID correcto para este proceso:
import ctypes
myappid = ''mycompany.myproduct.subproduct.version'' # arbitrary string
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
EDITAR: Consulte la respuesta de Ronan: la cadena de myappid debe ser unicode.
La respuesta de @DamonJW funcionará, pero hay una pequeña pega: myappid debe ser unicode (el tipo de argumento es PCWSTR).
import ctypes
myappid = u''mycompany.myproduct.subproduct.version'' # arbitrary string
ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid)
De lo contrario, al obtener AppUserModelID se obtendrán caracteres Unicode incorrectos ( 祭潣灭湡祭牰摯捵畳灢潲畤瑣瘮牥楳湯
:
import ctypes
from ctypes import wintypes
lpBuffer = wintypes.LPWSTR()
AppUserModelID = ctypes.windll.shell32.GetCurrentProcessExplicitAppUserModelID
AppUserModelID(ctypes.cast(ctypes.byref(lpBuffer), wintypes.LPWSTR))
appid = lpBuffer.value
ctypes.windll.kernel32.LocalFree(lpBuffer)
if appid is not None:
print(appid)
Dicho esto, es algo menor, ya que Windows aún reconocerá la cadena Unicode como "otro proceso" y cambiará el icono en consecuencia.