考虑到不少朋友对 TBtools 并不是很了解,我觉得似乎有必要专门撰写一份教程,使得几乎所有人都能轻松使用 TBtools 开发插件。
这份指南大体分为两个部分:
简单介绍 TBtools 插件开发的背景,知其道用其妙
针对不同类型程序/脚本,分别给出一个实例,进而方便参考实践
获取 TBtools 插件开发的插件
要开发 TBtools 插件,需要使用「Plugin Creator」(原名「CLI Program Wrapper Creator」)。可以直接在 TBtools 插件商店安装。
插件商店中,Basic 找到 Plugin Creator 即可
打开插件设计功能,可以看到界面
TBtools 插件的基本逻辑非常直接~
为什么?因为 TBtools 插件本身只做了一个事情,那就是将「命令行」转化为「界面」。当然其中会有一些过程逻辑的优化,但本质就是只要程序可以通过命令行执行,那么就可以界面化。所以,基本逻辑非常直接。
Plugin Creator 界面简介
插件制备界面看起来有点复杂,但实际很简单。不是所有人,不是所有插件开发都需要用到所有功能。绝大多数时候,我们只用到一小部分功能。
具体见后续「插件开发实例」,以实例来了解不同部分功能和使用方法或者技巧。
整体概况
实时脚本开发模式
实时脚本开发模式,可以展开看看
Manual Inject 进入插件环境开发测试
「Manual Inject」摁钮,用于提供一个方便调试的终端,终端环境与插件待执行命令的环境一致。
为演示这个摁钮的作用,我们直接从操作系统打开一个终端,会发现找不到 R 环境
由于 TBtools 中 R 插件会自动调用 Rserver 插件中的 R 环境,我们可以直接通过 Manual Inject 摁钮切入当前插件的环境。如果需要解决一些R包安装和配置问题,完全可以通过这个终端完成,依赖会被自动保存,方便插件的打包。(实际上,这意味着用于打包的脚本逻辑上还可以不用写依赖包安装的指令)
类似的,我们可以测试 Pyhton 环境。我的笔记本上没有python环境。没有弹出任何东西
通过 Manual Inject ,可以直接解决这个问题。进入插件环境。我们完全可以在其中解决对应程序依赖,比如使用 pip 等,解决完了再直接打包。这感觉对应一些解释型语言,比如 R,python,perl,等等,会非常友好。(PS:或许我们还是要考虑开发一个 Python Server,类似 R server?)
理解元件布局
元件布局的理解相对简单,主要有两点:
布局本身是按照右侧数字填写来规划的,获取 x 最大坐标,从 1 到 n,对应布局最终有 n 列;获取 y 最大坐标,从 1 到 m,对应布局最终有 m 行。对于没有元件填补的,会自动用空白填补
元件从上到下的位置,对于可用参数会按顺次出现在最终执行命令中,相信可以见 Command 示例
TBtools 插件开发可用元件
TBtools 插件的开发时,可以用多种不同类型元件。为此,首先我们可以了解一下具体有哪些界面化元件可以使用。
InFilePath: 设置输入文件
用于接收「一个输入文件路径」,对应界面。
PasteAsInFilePath: 设置输入文件或黏贴文本为输入文件
支持设置输入文件路径,但有时候我们想要灵活一点,比如我们想输入一些很少的文本,想自动基于我们输入或者黏贴的文本,让文本自动转换为文件。从界面来看,支持两种模式「File Input」和「Paste Input」
这个功能我很喜欢,因为有时候懒得去专门做一个文件。
OutFilePath: 设置输出文件
设置一个输出文件路径,效果与InputFilePath类似,但此处设置的是输出文件路径。
TextAsOutFilePath: 设置输出文件路径或直接输出为文本
有时候我们懒得去生成一个输出文件路径,希望获得文本。当然,从软件设计的角度,我们同时支持两种模式,由最终插件用户自己选择。
如果用户点击「Text Output」,那么对应的输出信息会自动更新到界面,方便最终插件用户使用。
FilePathList: 设置多个文件路径
有时候,一些软件需要输入多个文件路径,形成一个逗号分隔的文本
对于这个功能,输入的所有文件路径会被用逗号串联,作为参数提供给调用的程序。
Directory: 设置一个目录
与输入或者输出文件类似,也可以要求用户输入一个文件夹路径
Text: 设置文本参数
设置一个文本参数,相比于前述元件,Text 元件的提示信息位置有变化,同时默认值也支持。当然也可以为空。
CheckBox:设置勾选框
有一些参数似乎可选的,勾选框勾选时会自动增加到命令,未勾选时则不会。
Choice:设置选择框,单选
按照给定的选项,供用户选择其一
Parameter:设置必备位置参数
有一些参数是必须给的,比如一些调用程序的子程序,举个例子seqkit
软件提取序列时一般用grep
,综合命令是seqkit grep -f id.list in.seq.fa
。其中grep
是必备位置参数。那么可以用 Parameter 来指代。这个不会被显示在界面中
Note:用于放置一些提示信息,或工具名字
有时候我们希望给出一些提示信息,比如工具的名字。或者我们也可以放置作者信息之类。
MultiLineNote:用于放置多行文本的提示信息
一些时候,我们可能希望给用户提供更多提示信息。其实也可以放置一些 Demo 信息。按照个人需要来。
Link:用于设置一个超链接,方便用户跳转
注意到,设置超链接需要是完整链接,比如https://www.baidu.com
Image: 用于放置图片
有时候我们或许可以放置一些图片说明,或者甚至作者照片,软件Logo,个人公众号?用户交流群?公司Logo?
注意到,如果给链接,那么也支持用户点击跳转链接
TBtools 插件开发实例
可执行二进制程序的打包,以 BLAT 为例
BLAT 是一个类似 BLAST 的序列比对的软件,尤其体现在会尽量把比对片段串联成一个结果,具体给出示例。
你们不就一直说「TBtools」就是一个「打包其他软件」的工具吗?!
https://www.yuque.com/cjchen/hirv8i/ka8pyiux8lzxs295
脚本程序文件直接打包,以 Python 为例
当然,实际上不少脚本程序可以先编译为二进制程序,然后用类似上述 BLAT 的方式打包。这类可以让体积小一点,但有时可能会不太稳定,这个取决于具体编程语言的具体支持程度。实际上,完全可以直接以脚本模式打包。详细以一个 Python 基于输入文本生成二维码的脚本代码作为实例。
Pyhton | 零基础开发 TBtools 实用插件 - 画个二维码
https://www.yuque.com/cjchen/hirv8i/xpffndywtchwg83z
实时脚本模式开发
目前来说,实时脚本模式开发插件已有不少人尝试,完全可以用于:
Java
R
Python
...
Java 脚本直接转换为插件
最早我期望让更多人可以用 chatGPT 还是其他,直接用 java 语言开发轻量的 TBtools 插件,尽管还是没有引起太多人兴趣,不过这个模式挺好。可以先看一个示例。逻辑上,我们就是只需要准备一个java程序代码。
动动嘴,「chatGPT」开发一个丐版扫雷游戏 | 用TBtools
https://www.yuque.com/cjchen/hirv8i/pysqydi1ucelkmx
R 脚本直接转换为插件
前期 TBtools 有一个专门用于开发 R 插件的插件「Rgui Plugin Maker」,支持了早期不少 TBtools R 插件,整体比较简单,其实就是输入一个 R 脚本。但界面布局不支持实时设置,使用起来不太方便,尤其是依赖包解决上。由于 R 插件可以直接用 TBtools 的 Rserver 插件中的 R 环境,所以我们完全可以融合成一个。于是我做了一下。
合体!用 TBtools 界面化你的程序 / R脚本,更简单了!
https://www.yuque.com/cjchen/hirv8i/dakaef71wpawd4yh
总的来说,就是只要有可用的 R 脚本就可以打包成插件,可以是普通脚本,接收命令行参数,也可以是 ShinyApp。现在来说,甚至完全可以用 Manual Inject 来解决依赖。
Python 脚本直接转化为插件
由于目前我没有做 Python Server 插件,所以如果要使用 Python 脚本模式,那么最好是专门准备一个 Python 执行环境,参考上述。将该环境设置为插件依赖目录,参考上述。可以先直接在这个 Python 执行环境中解决依赖,逻辑上也完全可以通过 Manual Inject 启动 CMD或Shell 来解决。
写在最后
详细的实时更新的更好的插件开发教程,请直接阅读原文。排版更清晰...链接更容易跳转。