55

PyQt4でアプリケーションのタスクバーアイコンを設定するにはどうすればよいですか?

setWindowIcon を試してみたところ、メイン ウィンドウの左上にアイコンが正常に設定されましたが、Windows 7 タスクバーに表示されるアイコンには影響しません。タスクバー アイコンはデフォルトの Python pyw アイコンのままです。これが私のコードです:

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_()

setWindowIcon()[更新] の前にを置いてみましたshow()。他の画像、ico、png で試してみました。何も役に立ちません。

4

3 に答える 3

129

掘り下げた後、答えを見つけました。

Windows 7 では、タスクバーは「アプリケーション Windows」自体ではなく、「アプリケーション ユーザー モデル」用です。たとえば、実行中のアプリケーションの複数のインスタンスがあり、各インスタンスに独自のアイコンがある場合、それらはすべて 1 つのタスクバー アイコンの下にグループ化されます。Windows はさまざまなヒューリスティックを使用して、さまざまなインスタンスをグループ化するかどうかを決定します。この場合、Pythonw.exe によってホストされるすべてのものを Pythonw.exe のアイコンの下にグループ化する必要があると判断しました。

正しい解決策は、Pythonw.exe が単に他のアプリケーションをホストしているだけであることを Windows に伝えることです。おそらく、Python の将来のリリースでこれが行われるでしょう。または、レジストリ キーを追加して、Pythonw.exe がそれ自体がアプリケーションではなく単なるホストであることを Windows に通知することもできます。AppUserModelIDsについては、MSDN のドキュメントを参照してください。

または、Python からの Windows 呼び出しを使用して、このプロセスの正しい AppUserModelID を Windows に明示的に伝えることができます。

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

編集: Ronan の回答を参照してください: myappid 文字列は unicode である必要があります。

于 2009-10-11T23:43:59.353 に答える
13
于 2015-01-10T03:36:09.470 に答える
5

アプリで GUI を表示する前に、AppUserModelID を設定する必要があります。他の Windows 7 機能にアクセスする必要がある場合は、PyQt バインディングを備えた Windows 7 用の Qt アドオンであるQ7Goodiesを参照してください。

于 2010-09-08T18:24:03.263 に答える