Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法用PyGTK AppIndicator检测鼠标点击_Python_Linux_Gtk_Pygtk_Appindicator - Fatal编程技术网

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

Python 有没有办法用PyGTK AppIndicator检测鼠标点击,python,linux,gtk,pygtk,appindicator,Python,Linux,Gtk,Pygtk,Appindicator,我有一个简单的Python代码,它用from创建了一个Linux托盘指示器。那很好。但我想检测和处理一个简单的用户点击或双击这个托盘图标 据我所知,例如,Telegram Qt类,它支持此功能,因为当用户双击托盘图标时,Telegram窗口会自动显示 我知道AppIndicator3支持当用户将鼠标滚轮滚动到托盘图标上时触发的信号 当接收到滚动事件时发出信号 还有一个方法指示以某种方式处理了鼠标中键单击事件 将menuitem设置为在发生二次激活事件时激活 (即,单击鼠标中键)将在 图标

我有一个简单的Python代码,它用from创建了一个Linux托盘指示器。那很好。但我想检测和处理一个简单的用户点击或双击这个托盘图标

据我所知,例如,Telegram Qt类,它支持此功能,因为当用户双击托盘图标时,Telegram窗口会自动显示

  • 我知道AppIndicator3支持当用户将鼠标滚轮滚动到托盘图标上时触发的信号
当接收到滚动事件时发出信号

  • 还有一个方法指示以某种方式处理了鼠标中键单击事件
menuitem
设置为在发生二次激活事件时激活 (即,单击鼠标中键)将在 图标/标签

有人知道它是如何工作的吗?前面的两个例子都让我想知道为什么没有简单的鼠标点击信号/事件。我在想,是否有可能更深入,也许继承类并重写一些事件处理?或者,如果AppIndicator实现的是什么,也许可以更深入地研究和方法

还是有什么棘手的解决办法?因为这似乎是一个十多年来一直没有答案的问题,我对“不可能”的答案并不满意

我也知道我不是第一个问这个问题的人。我做了一些小调查,发现了多个相关的线索:






AppIndicator的感知限制是经过深思熟虑的设计选择(参见背景信息)

收听鼠标点击事件将无效

使用AppIndicator,您可以进行以下交互:

  • 主要操作:显示上下文菜单(可能只包含常规菜单项,不能放置任意小部件)
  • 次要操作:激活此上下文菜单中的一个特定项(通常在桌面上单击鼠标中键)
  • 收听图标上的鼠标滚动事件
您需要切换到另一个解决方案来检测任意鼠标点击。在这里,我假设您希望坚持使用Python/GTK,因为您相应地标记了您的问题

一种解决方案是使用Gtk.StatusIcon,它基于非常旧的。问题是这个解决方案正在慢慢地被淘汰。它在GTK3中标记为已弃用,并已在GTK4中删除

我所知道的唯一其他可行的解决方案是(由MintLinux提供)。它的特点是专门设计为Gtk.StatusIcon的现代替代品。它支持所有可以显示托盘图标的桌面环境

背景信息

Ubuntu桌面体验团队认为Linux桌面通知区域是一个“问题区域”。他们特别批评了不同应用程序状态图标在用户体验和风格上的不一致性。他们建议将用户交互限制为几种标准化的方式。这一努力导致了AppIndicator的开发。

顺便说一句,这里是另一篇关于不同解决方案的老(2011)尽管很有趣的博文: