代码之家  ›  专栏  ›  技术社区  ›  ewall

在Windows上获取gtk.StatusIcon的位置

  •  4
  • ewall  · 技术社区  · 15 年前

    我正在协助Windows支持一个PyGTK应用程序,它显示为一个系统托盘applet,但在GTK+goey的东西不是很强大。。。

    因此,当您左键单击systray图标时,无论您的系统托盘在哪里,窗口都会显示在托盘图标的右侧--在Linux上,使用 gtk.StatusIcon.get_geometry() 计算尺寸和位置。

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

    我可以猜测并将窗口放置在屏幕右下角,从底部向上30像素,因为这将捕获大多数没有移动任务栏的Windows用户。但对于那些有过的人来说,这看起来都错了。

    那么,有没有一种窗口友好的方式来获取systray图标的位置,以便我可以将窗口放在那里?


    请注意:我已经在使用 gtk_menu_popup() 具有 gtk_status_icon_position_menu 一个弹出式菜单,可以正常工作。

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

    任何其他想法都会很感激。。。

    3 回复  |  直到 15 年前
        1
  •  1
  •   dmitry_vk    15 年前

    Gtk提供功能Gtk_status_icon_position_menu,它可以作为GtkPositionFunc传递到Gtk_menu_popup中。 这似乎提供了所需的功能。

        2
  •  0
  •   Paulo Neves    15 年前

    我在带有gtk_status_icon_position_菜单的windows中体验到的行为是,它在用户在statusicon中单击的位置生成窗口

        3
  •  0
  •   jcoffland    14 年前

    我也在寻找一个答案,但已经找到一些可能有帮助的东西。

    在我看来,GTK似乎找到了从鼠标位置打开弹出菜单的位置。不知怎的,它发现鼠标按钮被点击在状态图标上。可能来自窗口系统发送的鼠标事件,也可能来自某种状态图标所在位置的知识。

    我得到的是,GTK必须要么1)知道StatusIcon的实际位置,要么2)当鼠标单击StatusIcon时从窗口系统获取事件。所以它必须知道这些信息。

    我也有一个弹出窗口,我想提高附近的状态图标,我也有一个弹出菜单,是工作正常。所以我在pygtk试了一下:

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

    我通过弹出菜单试图找到StatusIcon,即使我没有试图弹出菜单。它确实在StatusIcon附近有一个位置,但奇怪的是,它只在弹出一次弹出菜单后才起作用。

    不管怎样,这让我更接近了,也许能帮助你或其他人找到一个完整的解决方案。