我正在协助Windows支持PyGTK应用程序,该应用程序显示为系统托盘小程序,但在GTK +粘糊糊的东西上并不是那么强大......
我们拥有它,所以当您左键单击系统托盘图标时,无论您的系统托盘位于何处,窗口都会显示在您的托盘图标右侧 - 而在Linux上,此功能非常好,使用gtk.StatusIcon.get_geometry()
的结果计算大小和位置。
当然,gtk.StatusIcon.get_geometry()的文档指出“某些平台不提供此信息” - 这包括MS Windows,因为我得到了NoneType作为结果。
我可以猜测并将窗口放在屏幕的右下角,从底部向上30像素 - 因为这将捕获大多数未移动任务栏的Windows用户。但对于那些拥有的人来说,它看起来都是错误的。
那么有一种Windows友好的方式来获取系统托盘图标的位置,以便我可以将窗口放在那里吗?
请注意:我已将gtk_menu_popup()
与gtk_status_icon_position_menu
一起使用,以获得正常运行的弹出式菜单。
但我想要定位的是一个单独的gtk.Window,它不会接受gtk_status_icon_position_menu(因为它不是菜单)。
任何其他想法将不胜感激......
答案 0 :(得分:1)
Gtk提供了函数gtk_status_icon_position_menu,可以作为GtkPositionFunc传递给gtk_menu_popup。 这似乎提供了所要求的功能。
答案 1 :(得分:0)
我使用gtk_status_icon_position_menu在Windows中遇到的行为是它在用户在statusicon中点击的位置生成窗口
答案 2 :(得分: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一次后才能工作。
无论如何,这让我更接近一点,可能会帮助你或其他人找到一个完整的解决方案。