4

我正在协助 Windows 支持显示为系统托盘小程序的 PyGTK 应用程序,但在 GTK+ 粘糊糊的东西上并不那么强大......

我们有它,所以当您左键单击系统托盘图标时,无论您的系统托盘在哪里,窗口都会出现在您的托盘图标旁边——在 Linux 上,这很好用,使用结果gtk.StatusIcon.get_geometry()来计算大小和位置。

当然,gtk.StatusIcon.get_geometry() 的文档指出“某些平台不提供此信息”——这包括 MS Windows,因为我得到 NoneType 作为结果。

我可以猜测并将窗口定位在屏幕的右下角,从底部向上 30 像素——因为这将吸引大多数没有移动任务栏的 Windows 用户。但对于那些拥有的人来说,这看起来都是错误的。

那么是否有一种 Windows 友好的方式来获取系统托盘图标的位置,以便我可以将窗口放在那里?


请注意:我已经将gtk_menu_popup()withgtk_status_icon_position_menu用于一个可以正常工作的弹出菜单。

但是我要定位的是一个单独的gtk.Window,它不会接受gtk_status_icon_position_menu(因为它不是菜单)。

任何其他想法将不胜感激......

4

3 回答 3

1

Gtk 提供函数 gtk_status_icon_position_menu 可以作为 GtkPositionFunc 传递给 gtk_menu_popup。这似乎提供了请求的功能。

于 2009-08-07T22:33:14.457 回答
0

我在带有 gtk_status_icon_position_menu 的窗口中遇到的行为是它在用户在状态图标中单击的位置生成窗口

于 2009-12-09T13:48:27.763 回答
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 回答