• 售前

  • 售后

热门帖子
入门百科

Linux上为你的使命创建一个自界说的体系托盘指示器

[复制链接]
弄乐诟 显示全部楼层 发表于 2021-10-26 13:57:40 |阅读模式 打印 上一主题 下一主题

体系托盘图标如今还是一个很神奇的功能。只需要右击图标,然后选择想要的动作,你就可以大幅简化你的生活并且减少一样平常举动中的大量无用的点击。
一说到有效的体系托盘图标,我们很容易就想到 Skype、Dropbox 和 VLC:
然而体系托盘图标现实上要更有效得多;你可以根据自己的需求创建自己的体系托盘图标。本指导将会教你通过简朴的几个步调来实现这一目的。
前置条件
我们将要用 Python 来实现一个自界说的体系托盘指示器。Python 可能已经默安装在所有主流的 Linux 发行版中了,因此你只需要确定一下它已经被安装好了(此处使用版本为 2.7)。别的,我们还需要安装好 gir1.2-appindicator3 包。该库可以大概让我们很容易就能创建体系图标指示器。
在 Ubuntu/Mint/Debian 上安装:
  1. sudo apt-get install gir1.2-appindicator3
复制代码
在 Fedora 上安装:
  1. sudo dnf install libappindicator-gtk3
复制代码
对于其他发行版,只需要搜刮包罗 “appindicator” 的包就行了。
在 GNOME Shell 3.26 开始,体系托盘图标被删除了。你需要安装 这个扩展 (大概其他扩展)来为桌面启用该功能。否则你无法看到我们创建的指示器。
根本代码
下面是该指示器的根本代码:
  1. #!/usr/bin/python
  2. import os
  3. from gi.repository import Gtk as gtk, AppIndicator3 as appindicator
  4. def main():
  5. indicator = appindicator.Indicator.new("customtray", "semi-starred-symbolic", appindicator.IndicatorCategory.APPLICATION_STATUS)
  6. indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
  7. indicator.set_menu(menu())
  8. gtk.main()
  9. def menu():
  10. menu = gtk.Menu()
  11. command_one = gtk.MenuItem('My Notes')
  12. command_one.connect('activate', note)
  13. menu.append(command_one)
  14. exittray = gtk.MenuItem('Exit Tray')
  15. exittray.connect('activate', quit)
  16. menu.append(exittray)
  17. menu.show_all()
  18. return menu
  19. def note(_):
  20. os.system("gedit $HOME/Documents/notes.txt")
  21. def quit(_):
  22. gtk.main_quit()
  23. if __name__ == "__main__":
  24. main()
复制代码
我们待会会表明一下代码是怎么工作的。但是如今,让我们将该文本保存为 tray.py ,然后使用 Python 运行之:
  1. python tray.py
复制代码
我们会看到指示器运行起来了,如下图所示:
  1. Create a Custom System Tray Indicator For Your Tasks on Linux
复制代码
如今,让我们表明一下这个魔法的原理:
前三行代码仅仅用来指明 Python 的路径并且导入需要的库。
def main() :此为指示器的主函数。该函数的代码用来初始化并创建指示器。
  1. indicator = appindicator.Indicator.new("customtray","semi-starred-symbolic",
复制代码
appindicator.IndicatorCategory.APPLICATION_STATUS) :这里我们指明创建一个名为 customtray 的新指示器。这是指示器的唯一名称,如许体系就不会与其他运行中的指示器搞混了。同时我们使用名为 semi-starred-symbolic 的图标作为指示器的默认图标。你可以将之改成任何其他值;比如 firefox (假如你希望该指示器使用 FireFox 的图标),或任何其他你想用的图标名。最后与
  1. APPLICATION_STATUS
复制代码
相关的部门是指明指示器种别/范围的常规代码。
  1. indicator.set_status(appindicator.IndicatorStatus.ACTIVE)
复制代码
:这一行激活指示器。
indicator.set_menu(menu()) :这里说的是我们想使用 menu() 函数(我们会在反面界说) 来为我们的指示器创建菜单项。这很紧张,可以让你右击指示器后看到一个可以实施举动的列表。
gtk.main() :运行 GTK 主循环。
在 menu() 中我们界说了想要指示器提供的举动或项目。 command_one = gtk.MenuItem('My Notes') 仅仅使用文本 “My notes” 来初始化第一个菜单项,接下来 command_one.connect('activate',note) 将菜单的 activate 信号与反面界说的 note() 函数相连接;换句话说,我们告诉我们的体系:“当该菜单项被点击,运行 note() 函数”。最后, menu.append(command_one) 将菜单项添加到列表中。
exittray 相关的行是为了创建一个退出的菜单项,以便让你在想要的时间关闭指示器。
menu.show_all() 以及 return menu 只是返回菜单项给指示器的常规代码。
在 note(_) 下面是点击 “My Notes” 菜单项时需要执行的代码。这里只是
  1. os.system("gedit $HOME/Documents/notes.txt")
复制代码
这一句话; os.system 函数允许你在 Python 中运行 shell 下令,因此这里我们写了一行下令来使用 gedit 打开家目录下 Documents 目录中名为 notes.txt 的文件。比方,这个可以称为你以后的一样平常条记步伐了!
添加你所需要的使命
你只需要修改代码中的两块地方:
menu()
所以,比如说你想要创建一个新菜单项,在点击后,会使用 VLC 播放硬盘中某个特定的视频/音频文件?要做到这一点,只需要在第 17 行处添加下面三行内容:
  1. command_two = gtk.MenuItem('Play video/audio')
  2. command_two.connect('activate', play)
  3. menu.append(command_two)
复制代码
然后在第 30 行添加下面内容:
  1. def play(_):
  2. os.system("vlc /home/<username>/Videos/somevideo.mp4")
复制代码
将/
  1. home//Videos/somevideo.mp4`
复制代码
更换成你想要播放的视频/音频文件路径。如今保存该文件然后再次运行该指示器:
  1. python tray.py
复制代码
你将会看到:

Create a Custom System Tray Indicator For Your Tasks on Linux
而且当你点击新创建的菜单项时,VLC 会开始播放!
要创建其他项目/使命,只需要重复上面步调即可。但是要小心,需要用其他下令来更换 command_two ,比如 command_three ,如许在变量之间才不会产生辩论。然后界说新函数,就像 play(_) 函数那样。
可能性是无穷的;比如我用这种方法来从网上获取数据(使用 urllib2 库)并表现出来。我也用它来在背景使用 mpg123 下令播放 mp3 文件,而且我还界说了另一个菜单项来 killall mpg123 以随时克制播放音频。比如 Steam 上的 CS:GO 退出很费时间(窗口并不会主动关闭),因此,作为一个变通的方法,我只是最小化窗口然后点击某个自建的菜单项,它会执行
  1. killall -9 csgo_linux64
复制代码
下令。
你可以使用这个指示器来做任何事变:升级体系包、运行其他脚本——字面上的任何事变。
主动启动
我们希望体系托盘指示器能在体系启动后主动启动,而不用每次都手工运行。要做到这一点,只需要在自启动应用步伐中添加下面下令即可(但是你需要将 tray.py 的路径更换成你自己的路径):
  1. nohup python/home/<username>/tray.py&<br />
复制代码
下次重启体系,指示器会在体系启动后主动开始工作了!
结论
你如今知道了怎样为你想要的使命创建自己的体系托盘指示器了。根据每天需要运行的使命的性子和数量,此方法可以节流大量时间。有些人偏幸从下令行创建别名,但是这需要你每次都打开终端窗口大概需要有一个可用的下拉式终端仿真器,而这里,这个体系托盘指示器不停在工作,随时可用。
你从前用过这个方法来运行你的使命吗?很想听听你的想法。
总结
以上所述是小编给大家介绍的Linux上为你的使命创建一个自界说的体系托盘指示器,希望对大家有所帮助,假如大家有任何疑问请给我留言,小编会实时复兴大家的。在此也非常感谢大家对草根技术分享网站的支持!
假如你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作