4

私は、システム トレイ アプレットとして表示される PyGTK アプリの Windows サポートを支援していますが、GTK+ のグーイなものにはあまり強くありません...

システム トレイ アイコンを左クリックすると、システム トレイがどこにあるかに関係なく、トレイ アイコンのすぐ横にウィンドウが表示されます。Linux ではgtk.StatusIcon.get_geometry()、サイズと位置を計算する結果を使用して、うまく機能します。

もちろん、gtk.StatusIcon.get_geometry() のドキュメントでは、「一部のプラットフォームではこの情報が提供されない」と指摘されています。結果として NoneType が得られるため、これには MS Windows が含まれます。

推測して、ウィンドウを画面の右下隅 (下から 30 ピクセル上) に配置することができます。これは、タスク バーを移動していない Windows ユーザーの大部分を捉えることができるからです。しかし、持っている人にとっては、それはすべて間違っているように見えます.

それで、ウィンドウをそこに配置できるように、システムトレイアイコンの位置を取得するWindowsに適した方法はありますか?


注意: 私はすでに正しく動作するポップアップ メニューにgtk_menu_popup()withを使用しています。gtk_status_icon_position_menu

しかし、私が配置しようとしているのは、gtk_status_icon_position_menu (メニューではないため) を受け入れない別の gtk.Window です。

他のアイデアをいただければ幸いです...

4

3 に答える 3

1

Gtk は、GtkPositionFunc として gtk_menu_popup に渡すことができる関数 gtk_status_icon_position_menu を提供します。これは、要求された機能を提供しているようです。

于 2009-08-07T22:33:14.457 に答える
0

私もこれに対する答えを探していますが、役立つかもしれないものを見つけました。

GTK は、マウスの位置から PopupMenu を表示する場所を把握しているように思えます。どういうわけか、マウス ボタンが StatusIcon の上でクリックされたことがわかります。おそらく、ウィンドウ システムによって送信されたマウス イベントから、または StatusIcon の場所に関する何らかの知識からのいずれかです。

私が得ているのは、GTK が 1) StatusIcon の実際の場所を知っているか、2) StatusIcon をマウスでクリックしたときにウィンドウ システムからイベントを取得する必要があるということです。したがって、情報を知っている必要があります。

StatusIcon の近くに上げたいポップアップ ウィンドウもあり、正常に動作している PopupMenu もあります。だから私はpygtkでこれを試しました:

x, y, push = gtk.status_icon_position_menu(popup_menu, status_icon)

メニューをポップアップしようとはしていませんが、PopupMenu を渡して StatusIcon を見つけようとしました。これは StatusIcon の近くの位置を取得しますが、奇妙なことに、PopupMenu が一度ポップアップした後にのみ機能します。

とにかく、それで私は少し近づき、あなたや他の誰かが完全な解決策を見つけるのに役立つかもしれません.

于 2010-07-16T05:16:48.327 に答える
0

gtk_status_icon_position_menu を使用してウィンドウで経験した動作は、ユーザーが statusicon でクリックした場所にウィンドウを生成することでした。

于 2009-12-09T13:48:27.763 に答える