gpt4 book ai didi

python - 有没有办法用 PyGTK AppIndicator 检测鼠标点击

转载 作者:行者123 更新时间:2023-12-04 15:05:45 25 4
gpt4 key购买 nike

我有一个简单的 Python 代码,它使用 AppIndicator3 创建 Linux 托盘指示器。来自 GI .这很好用。但我想检测并处理简单的用户点击或双击此托盘图标。
据我所知,例如 Telegram uses Qt类QSystemTrayIcon ,并且它支持此功能,因为当用户双击托盘图标时,Telegram 窗口会自行显示。

  • 我知道 AppIndicator3 支持 scroll_event 当用户在托盘图标上滚动鼠标滚轮时触发的信号。

  • Signaled when the AyatanaAppIndicator3.Indicator receives a scroll event.


  • 还有一个 set_secondary_activate_target(menuitem) 指示以某种方式处理的中间单击事件的方法。

  • Set the menuitem to be activated when a secondary activation event(i.e. a middle-click) is emitted over theAyatanaAppIndicator3.Indicator icon/label.


    有人了解它是如何工作的吗?前面的两个例子让我想知道为什么没有简单的鼠标点击信号/事件。我在想是否可以更深入,也许可以继承 AyatanaAppIndicator3.Indicator类并重写一些事件处理?或者更深入地了解 StatusNotifierItemActivate方法,如果它是 AppIndicator 实现的?
    或者有什么棘手的解决方法吗?因为这似乎是一个十多年没有答案的问题,我对“不可能”的回答并不满意。
    我也知道我不是第一个问这个问题的人。我做了一些小的研究,发现了多个相关的线程:
    Python AppIndicator bindings -> howto check if the menu is open?
    How to run an action when clicking on an appindicator
    How to program a one click indicator (add middle click functionality)?
    indicator-application does not send signals when a menu is shown/hidden
    handle click events and modifiers

    最佳答案

    AppIndicator 的感知限制是经过深思熟虑的设计选择(请参阅背景信息)。
    监听鼠标点击事件会不是 工作。
    使用 AppIndicator,您可以进行以下交互:

  • 主要操作:显示上下文菜单(可能仅包含常规菜单项,不能放置任意小部件)。
  • 次要操作:激活此上下文菜单中的一个特定项目(通常在桌面上单击鼠标中键)。
  • 收听图标上的鼠标滚动事件。

  • 您将需要切换到另一种检测任意鼠标点击的解决方案。在这里,我假设您想坚持使用 Python/GTK,因为您相应地标记了您的问题。
    一种解决方案是使用基于相当旧的 System Tray Protocol Specification 的 Gtk.StatusIcon .问题是这个解决方案正在慢慢被淘汰。它在 GTK3 中被标记为已弃用,并已在 GTK4 中删除。
    我所知道的唯一其他可行的解决方案是 libxapps (由 Mint Linux)。它的特点 XApp.StatusIcon它专门设计为 Gtk.StatusIcon 的现代替代品。它支持所有可以显示托盘图标的桌面环境。
    背景资料
    Ubuntu 桌面体验团队将 Linux 桌面通知区域视为“问题区域”。他们具体批评了不同应用状态图标在用户体验和风格上的不一致。他们提议将用户交互限制为几种标准化方式。这一努力导致了 AppIndicator 的发展。
    (Source)
    顺便说一下,这是另一篇关于不同解决方案的旧博客(2011 年),尽管很有趣:
    StatusNotifierItem (aka App Indicators) for Qt applications

    关于python - 有没有办法用 PyGTK AppIndicator 检测鼠标点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66162473/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com