获取Windows上gtk.StatusIcon的位置
我正在帮助处理一个PyGTK应用程序在Windows上的支持问题,这个应用程序在系统托盘中显示,但我对GTK+的界面部分不是很熟悉...
我们设置了,当你左键点击托盘图标时,窗口会出现在你的托盘图标旁边,无论你的系统托盘在哪里——在Linux上,这个效果很好,我们使用gtk.StatusIcon.get_geometry()
来计算窗口的大小和位置。
当然,gtk.StatusIcon.get_geometry()的文档指出“某些平台不提供这些信息”——而Windows就是其中之一,因为我得到的结果是NoneType。
我可以猜测一下,把窗口放在屏幕的右下角,距离底部30像素——这样可以覆盖大多数没有移动任务栏的Windows用户。但对于那些移动了任务栏的用户来说,这样看起来就不对劲了。
那么,有没有一种适合Windows的方法来获取托盘图标的位置,以便我可以把我的窗口放在那里呢?
请注意:我已经在使用gtk_menu_popup()
和gtk_status_icon_position_menu
来显示一个弹出菜单,这个功能是正常的。
但我想要定位的是一个单独的gtk.Window,它不接受gtk_status_icon_position_menu(因为这不是一个菜单)。
如果有其他想法,我会很感激...
3 个回答
我也在找这个问题的答案,不过我发现了一些可能有帮助的东西。
看起来GTK会根据鼠标的位置来决定在哪里显示弹出菜单。它能判断出鼠标点击的是状态图标。可能是通过窗口系统发送的鼠标事件,或者是通过某种方式知道状态图标的位置。
我想说的是,GTK必须要么知道状态图标的实际位置,要么在鼠标点击状态图标时从窗口系统获取事件。所以它一定掌握了这些信息。
我也有一个弹出窗口想在状态图标附近显示,同时我有一个弹出菜单也能正常工作。所以我在pygtk中尝试了这个:
x, y, push = gtk.status_icon_position_menu(popup_menu, status_icon)
我传入了弹出菜单,试图找到状态图标的位置,尽管我并不是想要弹出菜单。这样确实能找到靠近状态图标的位置,但奇怪的是,这个方法只有在弹出菜单第一次弹出后才有效。
总之,这让我离解决方案更近了一步,也许能帮助到你或者其他人找到完整的解决办法。
我在Windows上使用gtk_status_icon_position_menu时,发现它会在用户点击状态图标的位置弹出窗口。
Gtk提供了一个叫做gtk_status_icon_position_menu的函数,这个函数可以作为GtkPositionFunc传递给gtk_menu_popup。这样做似乎可以实现我们想要的功能。