def create_extract_scores(self): extract_scores_labelframe = Labelframe(self.root, text="提取分数") extract_scores_labelframe.place(x=10, y=155, width=570, height=50) choose_score = SButton(root=extract_scores_labelframe, text="选择单个文件", x=10, y=0) create_tooltip(choose_score.button, "选择单个打分结果pdbqt文件") choose_scores_dir = SButton(root=extract_scores_labelframe, text="选择文件夹", x=100, y=0) create_tooltip(choose_scores_dir.button, "选择多个打分结果所在的文件夹") self.choose_scores_entry = SEntry( root=extract_scores_labelframe, textvariable=StringVar(), text=Configer.get_para("choose_score_file"), x=190, y=4, width=260) create_tooltip(self.choose_scores_entry.entry, "选择的文件/文件夹") choose_score.bind_open_file(self.choose_scores_entry.textvariable, title="选择对接结果pdbqt文件", file_type="pdbqt") choose_scores_dir.bind_open_dir(self.choose_scores_entry.textvariable, title="选择含有对接结果的文件夹") extract_button = SButton(extract_scores_labelframe, text="提取分数", x=460, y=0, width=90) create_tooltip(extract_button.button, "提取分数结果。如果是单个文件直接显示窗口。" "如果选择文件夹,则输出txt文件到选择的文件夹") extract_button.button.bind("<Button-1>", self.extract_score)
def _choose_protein_frame(self): choose_protein_labelframe = LabelFrame(self.root, text="选择受体") choose_protein_labelframe.place(x=10, y=135, width=570, height=50) choose_proteins = SButton(root=choose_protein_labelframe, text="选择受体", x=10, y=0) create_tooltip(choose_proteins.button, "选择pdbqt格式的受体") self.choose_proteins_entry = SEntry(root=choose_protein_labelframe, textvariable=StringVar(), text=Configer.get_para("choose_complex_proteins"), x=110, y=4, width=450) create_tooltip(self.choose_proteins_entry.entry, "受体文件") choose_proteins.bind_open_file(entry_text=self.choose_proteins_entry.textvariable, title="选择蛋白受体", file_type="pdbqt")
def choose_obabel(self): y = 50 # python路径 choose_obabel_path = SButton(self.top, text="选择obabel.exe的路径", x=10, y=y) create_tooltip(choose_obabel_path.button, "选择obabel.exe文件") self.choose_obabel_path_entry = SEntry(root=self.top, textvariable=StringVar(), text=Configer.get_para("obabel_path"), x=150, y=y + 4, width=230) create_tooltip(self.choose_obabel_path_entry.entry, "obabel.exe位置") choose_obabel_path.bind_open_file(entry_text=self.choose_obabel_path_entry.textvariable, title="选择obabel.exe", file_type="exe", parent=self.top)
def choose_python(self): y = 10 # python路径 choose_python_path = SButton(self.top, text="选择ADT的python路径", x=10, y=y) create_tooltip(choose_python_path.button, "必须选择mgltools目录里面的python.exe文件!\n" "比如:\nC:/mgltools/python.exe") self.choose_python_path_entry = SEntry(root=self.top, textvariable=StringVar(), text=Configer.get_para("python_path"), x=150, y=y + 4, width=230) create_tooltip(self.choose_python_path_entry.entry, "ADT的python路径") choose_python_path.bind_open_file(entry_text=self.choose_python_path_entry.textvariable, title="选择ADT中的python.exe", file_type="exe", parent=self.top)
def extract_from_file(self): extract_from_file_labelframe = Labelframe(self.root, text="从文件提取配体") extract_from_file_labelframe.place(x=10, y=210, width=570, height=85) choose_file_button = SButton(extract_from_file_labelframe, text="选择输入文件", x=10, y=0) create_tooltip(choose_file_button.button, "选择输入的txt文件") self.choose_output_entry = SEntry(extract_from_file_labelframe, textvariable=StringVar(), text=Configer.get_para("output_txt"), x=100, y=3, width=450) create_tooltip(self.choose_output_entry.entry, "选择的txt文件") choose_file_button.bind_open_file( entry_text=self.choose_output_entry.textvariable, title="选择输入的txt文件", file_type="txt") choose_output_button = SButton(extract_from_file_labelframe, text="选择提取目录", x=10, y=33) create_tooltip(choose_output_button.button, "选择提取输出的目录") self.choose_extract_folder_entry = SEntry( extract_from_file_labelframe, textvariable=StringVar(), text=Configer.get_para("extract_folder"), x=100, y=33, width=350) create_tooltip(self.choose_extract_folder_entry.entry, "选择提取输出的目录") choose_output_button.bind_open_dir( entry_text=self.choose_extract_folder_entry.textvariable, title="选择输出目录") extract_button = SButton(extract_from_file_labelframe, text="提取配体", x=460, y=30, width=90) create_tooltip(extract_button.button, "根据输入的文件提取配体") extract_button.button.bind("<Button-1>", self.extract_file)
def _create_tools_frame(self): tools_frame = LabelFrame(self.root, text="工具") tools_frame.place(x=10, y=140, width=570, height=100) # 读取配置文件 read_config_button = SButton(tools_frame, "读取配置文件", 10, 10) create_tooltip(read_config_button.button, "必须选择config.txt文件!") self.read_config_entry = SEntry(root=tools_frame, textvariable=StringVar(), text=Configer.get_para("read_config"), x=100, y=14, width=360) create_tooltip(self.read_config_entry.entry, "你选择的config.txt文件位置") read_config_button.bind_open_file( entry_text=self.read_config_entry.textvariable, title="请选择config.txt文件", file_type="txt") read_button = SButton(tools_frame, "读取到参数", 470, 10) create_tooltip(read_button.button, "读取到上方") read_button.button.bind("<Button-1>", self.read_config) # 自动生成盒子 choose_raw_ligand_button = SButton(tools_frame, "读取共晶配体", 10, 40) create_tooltip(choose_raw_ligand_button.button, "必须选择共晶配体pdbqt文件!") self.choose_raw_ligand_entry = SEntry( root=tools_frame, textvariable=StringVar(), text=Configer.get_para("choose_raw_ligand"), x=100, y=44, width=360) choose_raw_ligand_button.bind_open_file( entry_text=self.choose_raw_ligand_entry.textvariable, title="请选择“共晶配体”PDBQT文件!", file_type="pdbqt") create_tooltip(self.choose_raw_ligand_entry.entry, "你选择的共晶配体pdbqt文件位置") gen_box_button = SButton(tools_frame, "计算对接位点", 470, 40) create_tooltip(gen_box_button.button, "自动计算对接位点,该对接位点为共晶配体的" "最小外切正方体,结果仅供参考。") gen_box_button.button.bind("<Button-1>", self.gen_box)
def create_all_config(self): all_config_labelframe = LabelFrame(self.root, text="受体全局对接") all_config_labelframe.place(x=10, y=10, width=570, height=85) choose_ligand = SButton(all_config_labelframe, text="选择配体", x=10, y=0) create_tooltip(choose_ligand.button, "选择参考配体pdbqt文件") self.choose_ligand_entry = SEntry( all_config_labelframe, textvariable=StringVar(), text=Configer.get_para("refer_ligand"), x=100, y=3, width=450) create_tooltip(self.choose_ligand_entry.entry, "选择的参考配体") choose_ligand.bind_open_file(self.choose_ligand_entry.textvariable, title="选择配体pdbqt文件", file_type="pdbqt") choose_receptor = SButton(all_config_labelframe, text="选择受体", x=10, y=30) create_tooltip(choose_receptor.button, "选择需要全局搜索的单/多个受体文件夹,具体请看帮助或者教程") self.choose_receptor_entry = SEntry( all_config_labelframe, textvariable=StringVar(), text=Configer.get_para("refer_receptor"), x=100, y=33, width=350) create_tooltip(self.choose_receptor_entry.entry, "选择的参考") choose_receptor.bind_open_dir( entry_text=self.choose_receptor_entry.textvariable, title="选择单/多个受体所在文件夹") generate_button = SButton(all_config_labelframe, text="生成文件", x=460, y=30, width=90) create_tooltip(generate_button.button, "生成全局对接的多个config文件") generate_button.button.bind("<Button-1>", self.generate_configs)
def create_prepared_receptor(self): # 总框架 prepared_receptor_labelframe = LabelFrame(self.root, text="准备受体") prepared_receptor_labelframe.place(x=LEFT_X, y=130, width=FULL_NOTEBOOK_WIDTH, height=170) # 第一排,选择受体 choose_raw_receptor_button = SButton(prepared_receptor_labelframe, text="选择单个受体", x=LEFT_X, y=0) create_tooltip(choose_raw_receptor_button.button, "选择要进行准备的单个pdb受体") choose_raw_receptors_button = SButton(prepared_receptor_labelframe, text="选择多个受体", x=LEFT_X + 90, y=0) create_tooltip(choose_raw_receptors_button.button, "选择要进行准备的包含多个pdb受体的文件夹") self.choose_raw_receptor_entry = SEntry( prepared_receptor_labelframe, textvariable=StringVar(), text=Configer.get_para("raw_receptor_path"), x=190, y=3, width=270) create_tooltip(self.choose_raw_receptor_entry.entry, "选择的受体") # 绑定打开事件 choose_raw_receptor_button.bind_open_file( entry_text=self.choose_raw_receptor_entry.textvariable, title="选择受体pdb文件", file_type="pdb") choose_raw_receptors_button.bind_open_dir( entry_text=self.choose_raw_receptor_entry.textvariable, title="选择包含pdb受体文件的文件夹") get_info_button = SButton(prepared_receptor_labelframe, text="受体信息", x=470, y=0) get_info_button.button.bind("<Button-1>", self.getinfo) create_tooltip(get_info_button.button, "查看受体信息") # 第二排,提取配体保存的路径 ligand_save_path_button = SButton(prepared_receptor_labelframe, text="配体输出路径", x=10, y=30) create_tooltip(ligand_save_path_button.button, "选择提取的配体要保存的位置") self.ligand_save_path_entry = SEntry( prepared_receptor_labelframe, textvariable=StringVar(), text=Configer.get_para("extract_ligand_path"), x=100, y=33, width=360) create_tooltip(self.ligand_save_path_entry.entry, "提取的配体保存的目录,不存在将创建文件夹") ligand_save_path_button.bind_open_dir( entry_text=self.ligand_save_path_entry.textvariable, title="选择要保存的路径") save_ligand_button = SButton(prepared_receptor_labelframe, text="提取配体", x=470, y=30) save_ligand_button.button.bind("<Button-1>", self.extract_ligand) create_tooltip(save_ligand_button.button, "提取受体中的配体") # 第三排,准备受体 save_prepared_receptor_button = SButton(prepared_receptor_labelframe, text="受体输出路径", x=LEFT_X, y=60) create_tooltip(save_prepared_receptor_button.button, "选择准备后的受体保存路径") self.choose_prepare_output_path = SEntry( prepared_receptor_labelframe, textvariable=StringVar(), text=Configer.get_para("preped_path"), x=100, y=63, width=360) create_tooltip(self.choose_prepare_output_path.entry, "准备后的受体输出目录") save_prepared_receptor_button.bind_open_dir( self.choose_prepare_output_path.textvariable, title="选择输出目录") prepare_receptor_button = SButton(prepared_receptor_labelframe, text="准备受体", x=470, y=60) prepare_receptor_button.button.bind("<Button-1>", self.prepared_receptor) create_tooltip(prepare_receptor_button.button, "开始准备受体") # 第四排,准备选项 fourth_y = 90 SLabel(prepared_receptor_labelframe, text="ADT参数", x=LEFT_X, y=fourth_y) SLabel(prepared_receptor_labelframe, text="修复", x=100, y=fourth_y) fix_text = ("bonds_hydrogens", "bonds", "hydrogens", "checkhydrogens", "None") self.fix_method = SCombbox( root=prepared_receptor_labelframe, textvariable=StringVar(), values=fix_text, default_value=Configer.get_para("fix_method"), x=135, y=fourth_y, width=140) create_tooltip( self.fix_method.combobox, "使用ADT方法修复受体\n" "bonds_hydrogens:修复键级和加氢\n" "bonds:修复键级\n" "hydrogens:加氢\n" "checkhydrogens:没有氢的地方加氢\n" "None:不进行修复") self.preserve_charges = SCheckbutton( prepared_receptor_labelframe, text="保留电荷", variable=StringVar(), value=Configer.get_para("preserve_charges"), x=290, y=fourth_y) create_tooltip(self.preserve_charges.checkbutton, "勾选则保留输入电荷,不勾选添加gasteiger电荷") SLabel(prepared_receptor_labelframe, text="|", x=380, y=fourth_y - 2) self.is_fix_receptor = SCheckbutton( prepared_receptor_labelframe, text="Biopython功能", variable=StringVar(), value=Configer.get_para("fix_receptor"), x=400, y=fourth_y) create_tooltip( self.is_fix_receptor.checkbutton, "只针对单个受体。可以用来检测同源链,提取特定链," "修复受体(修复断链等)。" "具体修复方法参见biopython官方文档") # 第五排,清理格式 fifth_y = 120 SLabel(prepared_receptor_labelframe, text="受体处理", x=LEFT_X, y=fifth_y) self.nphs = SCheckbutton(prepared_receptor_labelframe, text="nphs", variable=StringVar(), value=Configer.get_para("nphs"), x=LEFT_X + 90, y=fifth_y) create_tooltip(self.nphs.checkbutton, "合并非极性氢") self.lps = SCheckbutton(prepared_receptor_labelframe, text="lps", variable=StringVar(), value=Configer.get_para("lps"), x=LEFT_X + 150, y=fifth_y) create_tooltip(self.lps.checkbutton, "合并电荷,去除孤对电子") self.waters = self.waters = SCheckbutton( prepared_receptor_labelframe, text="waters", variable=StringVar(), value=Configer.get_para("waters"), x=LEFT_X + 200, y=fifth_y) create_tooltip(self.waters.checkbutton, "去除水") self.nonstdres = self.nonstdres = SCheckbutton( prepared_receptor_labelframe, text="nonstdres", variable=StringVar(), value=Configer.get_para("nonstdres"), x=LEFT_X + 270, y=fifth_y) create_tooltip(self.nonstdres.checkbutton, "去除非标准氨基酸链(核酸等)")
def cal_rmsd(self, event): self.windows = STopLevel(self.root, win_x=570, win_y=130, title="计算RMSD").toplevel # 参考配体 single_ligand_button = SButton(self.windows, text="选择参考配体", x=10, y=10) create_tooltip(single_ligand_button.button, "选择一个参考配体,只支持xyz格式") self.single_ligand_entry = SEntry( self.windows, textvariable=StringVar(), text=Configer.get_para("single_ligand") if self.single_ligand == "" else self.single_ligand, x=100, y=13, width=450) create_tooltip(self.single_ligand_entry.entry, "选择的参考配体") single_ligand_button.bind_open_file( entry_text=self.single_ligand_entry.textvariable, title="选择参考配体", file_type="xyz", parent=self.windows) # 比较配体 sec_ligand_button = SButton(self.windows, text="选择第二个配体", x=10, y=50) create_tooltip(sec_ligand_button.button, "选择需要比较的单个配体") sec_ligands_button = SButton(self.windows, text="选择文件夹", x=110, y=50) create_tooltip(sec_ligands_button.button, "选择第二个配体所在的文件夹") self.sec_ligands_entry = SEntry( self.windows, textvariable=StringVar(), text=Configer.get_para("sec_ligands") if self.sec_ligands == "" else self.sec_ligands, x=200, y=53, width=350) create_tooltip(self.sec_ligands_entry.entry, "选择需要比较的配体") sec_ligand_button.bind_open_file( entry_text=self.sec_ligands_entry.textvariable, title="选择需要比较的配体", file_type="xyz", parent=self.windows) sec_ligands_button.bind_open_dir( entry_text=self.sec_ligands_entry.textvariable, title="选择需要比较的配体所在的文件夹", parent=self.windows) SLabel(root=self.windows, text="旋转方法", x=10, y=90) rotate_method_text = ("none", "kabsch", "quaternion") self.rotate_method_box = SCombbox( root=self.windows, textvariable=StringVar(), values=rotate_method_text, default_value=Configer.get_para("rotate_method") if self.rotate_method == "" else self.rotate_method, x=70, y=90, width=85) create_tooltip(self.rotate_method_box.combobox, "是否旋转原子和旋转方法") SLabel(root=self.windows, text="原子对齐方法", x=170, y=90) reorder_method_text = ("hungarian", "distance") self.reorder_method_box = SCombbox( root=self.windows, textvariable=StringVar(), values=reorder_method_text, default_value=Configer.get_para("reorder_method") if self.reorder_method == "" else self.reorder_method, x=260, y=90, width=85) create_tooltip(self.rotate_method_box.combobox, "是否旋转原子和旋转方法") rmsd_button = SButton(self.windows, "计算RMSD", x=465, y=90) create_tooltip(rmsd_button.button, "计算RMSD") rmsd_button.button.bind("<Button-1>", self._cal_rmsd) # 关闭窗口保存参数 self.windows.protocol( "WM_DELETE_WINDOW", lambda: self.save_rmsd( self.windows, self.single_ligand_entry.textvariable.get(), self.sec_ligands_entry.textvariable.get(), self.rotate_method_box.textvariable.get(), self.reorder_method_box.textvariable.get()))