当前位置: 首页 > 科技观察

在Linux上为您的任务创建自定义系统托盘指示器

时间:2023-03-13 21:05:34 科技观察

系统托盘图标仍然是一个了不起的功能。只需右键单击图标并选择所需的操作,您就可以大大简化您的生活并减少日常活动中的大量无用点击。说到有用的系统托盘图标,很容易想到Skype、Dropbox和VLC:然而,系统托盘图标实际上要有用得多;您可以创建自己的系统托盘图标以满足您的需要。本指南将教您通过几个简单的步骤来做到这一点。先决条件我们将在Python中实现自定义系统托盘指示器。Python可能已经默认安装在所有主要的Linux发行版上,因此您只需要确保它已安装(此处使用2.7版)。另外,我们还需要安装gir1.2-appindicator3包。这个库允许我们轻松创建系统图标指示器。在Ubuntu/Mint/Debian上安装:sudoapt-getinstallgir1.2-appindicator3在Fedora上安装:sudodnfinstalllibappindicator-gtk3对于其他发行版,只需搜索包含“appindicator”的软件包。从GNOMEShell3.26开始,系统托盘图标被移除。您需要安装此扩展(或其他扩展)才能为桌面启用此功能。否则您将无法看到我们创建的指标。基本代码这是该指标的基本代码:#!/usr/bin/pythonimportosfromgi.repositoryimportGtkasgtk,AppIndicator3asappindicatordefmain():indicator=appindicator.Indicator.new("customtray","semi-星号符号”,appindicator.IndicatorCategory.APPLICATION_STATUS)indicator.set_status(appindicator.IndicatorStatus.ACTIVE)indicator.set_menu(menu())gtk.main()defmenu():menu=gtk.Menu()command_one=gtk。MenuItem('我的笔记')command_one.connect('activate',note)menu.append(command_one)exittray=gtk.MenuItem('ExitTray')exittray.connect('activate',quit)menu.append(exittray)menu.show_all()返回菜单defnote(_):os.system("gedit$HOME/Documents/notes.txt")defquit(_):gtk.main_quit()if__name__=="__main__":main()我们稍后会解释代码是如何工作的。但现在,让我们将此文本保存为tray.py,并使用Python运行它:pythontray.py我们将看到指示器工作,如下图所示:为您在Linux上的任务创建自定义系统托盘指示器现在,让我们来解释一下这个魔法是如何工作的:前三行代码仅用于指定Python的路径和导入所需的库。defmain():这是指标的主要功能。此函数的代码用于初始化和创建指标。indicator=appindicator.Indicator.new("customtray","semi-starred-symbolic",appindicator.IndicatorCategory.APPLICATION_STATUS):这里我们指定创建一个名为customtray的新指标。这是指标的唯一名称,这样系统就不会与正在运行的其他指标混淆。我们还使用一个名为semi-starred-symbolic的图标作为指标的默认图标。您可以将其更改为任何其他值;例如firefox(如果您希望指示器使用FireFox图标),或您想要的任何其他图标名称。***与APPLICATION_STATUS关联的部分是指定指标类别/范围的通用代码。indicator.set_status(appindicator.IndicatorStatus.ACTIVE):此行激活指标。indicator.set_menu(menu()):这表示我们要使用menu()函数(我们将在稍后定义)为我们的指标创建菜单项。这很重要,因为它允许您右键单击指示器以查看可以执行的操作列表。gtk.main():运行GTK主循环。在menu()中,我们定义了我们希望指示器提供的行为或项目。command_one=gtk.MenuItem('MyNotes')只使用文本“我的笔记”来初始化第一个菜单项,然后command_one.connect('activate',note)将菜单的激活信号连接到note()函数;换句话说,我们告诉我们的系统:“当这个菜单项被点击时,运行note()函数”。***,menu.append(command_one)将菜单项添加到列表中。与exittray相关的行是创建一个退出菜单项,让您可以在需要时关闭指示器。menu.show_all()和returnmenu只是将菜单项返回给指示器的常规代码。下面note(_)是点击“我的笔记”菜单项时需要执行的代码。这里只是一句os.system("gedit$HOME/Documents/notes.txt");os.system函数可以让你在Python中运行shell命令,所以这里我们写一行命令使用gedit打开主目录下的Documents目录下一个名为notes.txt的文件。比如这个以后可以叫你的日常笔记程序!要添加您需要的任务,您只需要修改代码中的两个地方:在menu()中为您想要的任务定义新的菜单项。创建一个新函数以在单击菜单项时执行特定操作。那么,假设您想创建一个新的菜单项,单击该菜单项时,将使用VLC从您的硬盘驱动器播放特定的视频/音频文件?为此,只需在第17行添加以下三行:command_two=gtk.MenuItem('播放视频/音频')command_two.connect('activate',play)menu.append(command_two)然后在第30行:defplay(_):os.system("vlc/home//Videos/somevideo.mp4")将/home//Videos/somevideo.mp4`替换为您要播放的视频/音频文件小路。现在保存文件并再次运行指示器:pythontray.py您将看到:在Linux上为您的任务创建自定义系统托盘指示器当您单击新创建的菜单项时,VLC将开始播放!要创建其他项目/任务,只需重复上述步骤即可。但是要注意,需要把command_two换成别的命令,比如command_three,这样变量之间就不会冲突了。然后定义新函数,就像play(_)函数一样。可能性是无止境;例如,我使用此方法从网络上获取数据(使用urllib2库)并显示它。我还使用它在后台使用mpg123命令播放mp3文件,我还定义了另一个菜单项来killallmpg123以随时停止音频。比如Steam上的CS:GO需要很长时间才能退出(窗口不会自动关闭),所以作为一种解决方法,我只是最小化窗口并点击一个自建菜单项,它会执行killall-9csgo_linux64命令.您可以使用此指标做任何事情:升级系统包、运行其他脚本-几乎任何事情。自动启动我们希望系统托盘指示器在系统启动后自动启动,而不是每次都手动运行它。为此,只需在自动启动应用程序中添加以下命令(但您需要将tray.py路径替换为您自己的路径):nohuppython/home//tray.py&下次重新启动系统时,系统启动后指示灯会自动开始工作!结论您现在知道了如何为您想要的任务创建您自己的系统托盘指示器。根据每天需要运行的任务的性质和数量,这种方法可以节省大量时间。有些人更喜欢从命令行创建别名,但这需要您每次都打开一个终端窗口或有一个可用的下拉终端仿真器,而在这里,这个系统托盘指示器总是在工作,随时可用。您以前使用过这种方法来运行您的任务吗?很想听听你的想法。