def __init__(self, tab, config): self.root = tab self.config = config # 需要保存的参数 self.input_format = None self.choose_ligands_entry = None self.output_format = None self.gen3d = None self.ph = None self.is_minimize = None self.choose_output_dir_entry = None self._create_choose_ligand_frame() self._create_output_ligand_frame() # 开始转换 self._create_convert() # 帮助按钮 help_button = HelpButton(root=self.root, help_text=TAB3_HELP_TEXT, x=410, y=300, width=80) create_tooltip(help_button.help_button, "获取帮助")
def __init__(self, tab, config): self.root = tab self.config = config # 需要保存的参数 self.choose_ligand_entry = None self.choose_proteins_entry = None self.choose_output_entry = None self.times_entry = None # 不需要保存的参数 self.docking_time_label = None self._choose_ligand_frame() self._choose_protein_frame() self._choose_output_frame() self._choose_docking_config() self._start_docking() # 帮助按钮 help_button = HelpButton(root=self.root, help_text=TAB4_HELP_TEXT, x=410, y=300, width=80) create_tooltip(help_button.help_button, "获取帮助")
def __init__(self, tab, config): self.root = tab self.config = config # 需要保存的参数 self.choose_ligand_entry = None self.choose_receptor_entry = None self.choose_pdbqt_dir_entry = None self.choose_scores_entry = None self.choose_output_entry = None self.choose_extract_folder_entry = None # 创建窗体 self.create_all_config() self.create_move_pdbqt() self.create_extract_scores() self.extract_from_file() # 帮助按钮 help_button = HelpButton(root=self.root, help_text=TAB5_HELP_TEXT, x=410, y=300, width=80) create_tooltip(help_button.help_button, "获取帮助")
def _start_docking(self): y = 250 docking_button = SButton(root=self.root, text="开始对接", x=10, y=y) create_tooltip(docking_button.button, "使用Vina进行对接") self.progress = Progressbar(self.root, mode="determinate") self.progress.place(x=100, y=y + 2, width=400) create_tooltip(self.progress, "对接进度") self.progress_label = SLabel(self.root, text="没有任务", x=510, y=y) docking_button.button.bind("<Button-1>", self._docking) text_y = 276 current_protein_frame = Frame(self.root, width=200, height=40) current_protein_frame.place(x=10, y=text_y) self.current_protein = SLabel(root=current_protein_frame, text="", x=0, y=0) current_ligand_frame = Frame(self.root, width=200, height=50) current_ligand_frame.place(x=220, y=text_y) self.current_ligand = SLabel(root=current_ligand_frame, text="", x=0, y=0) current_time_frame = Frame(self.root, width=150, height=50) current_time_frame.place(x=430, y=text_y) self.current_time = SLabel(root=current_time_frame, text="", x=0, y=0)
def create_config_button(self): # 脚本配置 config_button = Button(self.main_window, text="脚本配置", command=self.set_config) config_button.place(x=CONFIG_BUTTON_X, y=CONFIG_BUTTON_Y, width=BUTTON_WIDTH) create_tooltip(config_button, "设置脚本所需路径")
def create_exit_button(self): """ 创建退出按钮 """ exit_button = Button(self.main_window, text="退出", command=self.save_para) exit_button.place(x=EXIT_BUTTON_X, y=EXIT_BUTTON_Y, width=BUTTON_WIDTH) create_tooltip(exit_button, "保存参数并退出软件")
def _create_convert(self): y = 230 convert_button = SButton(root=self.root, x=10, y=y, text="开始转换") create_tooltip(convert_button.button, "开始转换") self.progress = Progressbar(self.root, mode="determinate") self.progress.place(x=100, y=y + 2, width=400) create_tooltip(self.progress, "转换进度") self.progress_label = SLabel(self.root, text="没有任务", x=510, y=y) convert_button.button.bind("<Button-1>", self._start_convert)
def _choose_output_frame(self): choose_output_labelframe = LabelFrame(self.root, text="复合物输出") choose_output_labelframe.place(x=10, y=190, width=570, height=50) choose_output = SButton(root=choose_output_labelframe, text="选择输出文件夹", x=10, y=0) create_tooltip(choose_output.button, "选择复合物输出目录") self.choose_output_entry = SEntry(root=choose_output_labelframe, textvariable=StringVar(), text=Configer.get_para("choose_complex_output"), x=110, y=4, width=450) create_tooltip(self.choose_output_entry.entry, "所选的复合物输出目录") choose_output.bind_open_dir(entry_text=self.choose_output_entry.textvariable, title="选择复合物输出的文件夹")
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_ligand(self): self.ligand_list = Listbox(self.choose_ligand_tab, width=30, height=10) self.ligand_list.place(x=10, y=10, width=255, height=150) scroll = Scrollbar(self.ligand_list) scroll.pack(side=RIGHT, fill=Y) self.ligand_list.configure(yscrollcommand=scroll.set) scroll.config(command=self.ligand_list.yview) pre_button = SButton(self.choose_ligand_tab, "上一步", 10, 170) pre_button.button.bind("<Button-1>", self.jump_chain) next_button = SButton(self.choose_ligand_tab, "提取配体", 165, 170) create_tooltip(next_button.button, "提取选中的配体为pdbqt格式") next_button.button.bind("<Button-1>", self.save_ligand)
def create_download_receptor(self): # frame创建 download_receptor_labelframe = LabelFrame(self.root, text="下载受体") download_receptor_labelframe.place(x=LEFT_X, y=LEFT_Y, width=FULL_NOTEBOOK_WIDTH, height=TAB1_LABEL_FRAME_HEIGHT) # 第一排,输入pdbid SLabel(download_receptor_labelframe, "PDBID:", x=LEFT_X, y=0) self.pdb_id_entry = SEntry(download_receptor_labelframe, textvariable=StringVar(), text=Configer.get_para("pdbid"), x=70, y=0, width=50) create_tooltip(self.pdb_id_entry.entry, "请输入四位PDB的ID") # 第二排,保存位置 pdb_save_path_button = SButton(download_receptor_labelframe, text="选择保存的路径", x=LEFT_X, y=30) create_tooltip(pdb_save_path_button.button, "选择下载受体要保存的位置") self.pdb_save_path_entry = SEntry(download_receptor_labelframe, textvariable=StringVar(), text=Configer.get_para("pdb_path"), x=110, y=34, width=440) create_tooltip(self.pdb_save_path_entry.entry, "文件将要保存的目录,不存在将创建文件夹") pdb_save_path_button.bind_open_dir( entry_text=self.pdb_save_path_entry.textvariable, title="选择要保存的路径") # 第三排,开始下载 download_pdb_button = SButton(download_receptor_labelframe, text="开始下载", x=LEFT_X, y=60) create_tooltip(download_pdb_button.button, "从Protein Data Bank下载受体") download_pdb_button.button.bind("<Button-1>", self.download_pdb) self.download_progressbar = Progressbar(download_receptor_labelframe, mode="determinate") self.download_progressbar.place(x=100, y=62, width=380) create_tooltip(self.download_progressbar, "下载进度") self.download_state_label = SLabel(download_receptor_labelframe, text="没有下载", x=490, y=60)
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 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_docking_config(self): choose_config_labelframe = LabelFrame(self.root, text="对接配置") choose_config_labelframe.place(x=10, y=190, width=570, height=50) self.docking_time_label = SLabel(root=choose_config_labelframe, text="对接次数:", x=10, y=0) self.times_entry = SEntry(root=choose_config_labelframe, textvariable=StringVar(), text=Configer.get_para("docking_times"), x=80, y=0, width=20) create_tooltip(self.times_entry.entry, "每个配体需要对接的次数")
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 __init__(self, root, help_text, x, y, width): """ :param root: 要放置到哪里 :param help_text: 弹出提示框显示的文字 :param x: 位置x :param y: 位置y :param width: 按钮宽度 """ self.root = root self.help_text = help_text self.x = x self.y = y self.width = width self.help_button = Button(self.root, text="帮助", command=self.show_help) create_tooltip(self.help_button, "获取帮助") self.help_button.place(x=self.x, y=self.y, width=self.width)
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 getinfo(self, event): # 获取受体 receptor = self.choose_raw_receptor_entry.textvariable.get() if not receptor.endswith(".pdb"): messagebox.showerror("错误!", "只支持查看单个pdb格式的文件信息!") return if Check.check_path(receptor): messagebox.showerror("错误", "受体路径不能包含空格!") return if not os.path.exists(receptor): messagebox.showerror("错误", "所选文件或者文件夹不存在!") return structure = ReceptorProcessor.get_structure(receptor) window = STopLevel(self.root, 500, 400, "PDB信息").toplevel wrap_length = 480 s_name = structure.header["name"] SLabel(window, "受体名称:\n" + s_name, 10, 10).label.configure(wraplength=wrap_length) s_redate = structure.header["release_date"] SLabel(window, "发布时间:\n" + s_redate, 10, 70).label.configure(wraplength=wrap_length) s_method = structure.header["structure_method"] SLabel(window, "方法:\n" + s_method, 10, 130).label.configure(wraplength=wrap_length) s_resolution = str(structure.header["resolution"]) SLabel(window, "分辨率:\n" + s_resolution + "埃", 10, 190).label.configure(wraplength=wrap_length) s_refe = structure.header["journal_reference"] reference = SLabel(window, "参考文献:\n" + s_refe, 10, 250).label reference.configure(wraplength=wrap_length) doi_url = "http://www.doi.org/" + s_refe.strip().split(" ")[-1] open_url_button = SButton(window, "打开文献网页", 75, 245) open_url_button.button.configure( command=lambda: webbrowser.open(doi_url)) create_tooltip(open_url_button.button, "使用默认浏览器打开文献链接")
def __init__(self, tab, config): self.root = tab self.config = config # 需要保存的参数 self.input_format = None self.complex_ligand_num_entry = None self.remain_ligand = None self.choose_ligands_entry = None self.choose_output_entry = None self.extract_output_entry = None self._choose_ligand_frame() self._choose_protein_frame() self._choose_output_frame() self._start_join() # 帮助按钮 help_button = HelpButton(root=self.root, help_text=TAB6_HELP_TEXT, x=410, y=300, width=80) create_tooltip(help_button.help_button, "获取帮助")
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_move_pdbqt(self): move_pdbqt_labelframe = Labelframe(self.root, text="移动受体文件") move_pdbqt_labelframe.place(x=10, y=100, width=570, height=50) choose_pdbqt_dir = SButton(move_pdbqt_labelframe, text="选择文件", x=10, y=0) create_tooltip(choose_pdbqt_dir.button, "选择包含pdbqt受体的文件夹") self.choose_pdbqt_dir_entry = SEntry( move_pdbqt_labelframe, textvariable=StringVar(), text=Configer.get_para("pdbqt_dir"), x=100, y=3, width=350) create_tooltip(self.choose_pdbqt_dir_entry.entry, "选择包含pdbqt受体的文件夹") choose_pdbqt_dir.bind_open_dir( self.choose_pdbqt_dir_entry.textvariable, title="选择有pdbqt受体的文件夹") move_button = SButton(move_pdbqt_labelframe, text="生成文件", x=460, y=0, width=90) create_tooltip(move_button.button, "开始移动pdbqt文件并重命名为preped.pdbqt") move_button.button.bind("<Button-1>", self.move_file)
def vina_validate(self, event): self.windows = STopLevel(self.root, win_x=570, win_y=50, title="计算RMSD").toplevel # 选择目录 input_button = SButton(self.windows, text="选择验证目录", x=10, y=10) create_tooltip(input_button.button, "选择要验证的目录。该目录必须包含配体和受体!") self.input_path_entry = SEntry( self.windows, textvariable=StringVar(), text=Configer.get_para("validate_folder") if self.validate_folder == "" else self.validate_folder, x=100, y=13, width=360) create_tooltip(self.input_path_entry.entry, "选择的要验证的目录") input_button.bind_open_dir( entry_text=self.input_path_entry.textvariable, title="选择要验证的目录", parent=self.windows) validate_button = SButton(self.windows, "开始验证", x=465, y=10) create_tooltip(validate_button.button, "开始验证Vina方案") validate_button.button.bind("<Button-1>", self._vina_validate) # 关闭窗口保存参数 self.windows.protocol( "WM_DELETE_WINDOW", lambda: self.save_validate( self.windows, self.input_path_entry.textvariable.get()))
def _choose_ligand_frame(self): choose_ligand_labelframe = LabelFrame(self.root, text="选择配体") choose_ligand_labelframe.place(x=10, y=10, width=570, height=50) choose_ligands = SButton(root=choose_ligand_labelframe, text="选择单/多个配体", x=10, y=0) create_tooltip(choose_ligands.button, "选择单/多个配体,配体格式必须是pdbqt!") choose_ligand_dir = SButton(root=choose_ligand_labelframe, text="选择文件夹", x=110, y=0) create_tooltip(choose_ligand_dir.button, "选择包含pdbqt格式配体的文件夹。") self.choose_ligand_entry = SEntry( root=choose_ligand_labelframe, textvariable=StringVar(), text=Configer.get_para("choose_docking_ligands"), x=200, y=4, width=360) create_tooltip(self.choose_ligand_entry.entry, "选择的配体或者包含配体的文件夹") choose_ligands.bind_open_files( entry_text=self.choose_ligand_entry.textvariable, title="选择单/多个配体", file_type="pdbqt") choose_ligand_dir.bind_open_dir( entry_text=self.choose_ligand_entry.textvariable, title="选择包含pdbqt配体的文件夹")
def __init__(self, tab: Frame, config: Configer): """ 创建一个选项卡,需要父窗口和用来保存配置的配置器 :param tab: 选项卡 :param config: 配置器 """ # 变量 self.root = tab self.config = config # 需要保存的参数 self.center_x = None self.center_y = None self.center_z = None self.size_x = None self.size_y = None self.size_z = None self.exhaustiveness = None self.num_modes = None self.energy_range = None self.read_config_entry = None self.choose_raw_ligand_entry = None self.output_config_entry = None # 创建分块内容 self._create_main_frame() self._create_option_frame() self._create_tools_frame() self._create_output_frame() # 帮助按钮 help_button = HelpButton(root=self.root, help_text=TAB2_HELP_TEXT, x=410, y=300, width=BUTTON_WIDTH) create_tooltip(help_button.help_button, "获取帮助")
def __init__(self, tab, config: Configer): self.root = tab self.config = config self.windows = None # 需要保存的参数 self.input_smi = "" self.output_path = "" self.single_ligand = "" self.sec_ligands = "" self.rotate_method = "" self.reorder_method = "" self.validate_folder = "" # 需要保存的输入框 self.input_smi_entry = None self.output_path_entry = None self.single_ligand_entry = None self.sec_ligands_entry = None self.rotate_method_box = None self.reorder_method_box = None self.input_path_entry = None # 创建按钮 self.create_buttons() # 帮助按钮 help_button = HelpButton(root=self.root, help_text=TAB8_HELP_TEXT, x=410, y=300, width=80) create_tooltip(help_button.help_button, "获取帮助")
def _choose_protein_frame(self): choose_protein_labelframe = LabelFrame(self.root, text="选择受体") choose_protein_labelframe.place(x=10, y=70, width=570, height=50) choose_proteins = SButton(root=choose_protein_labelframe, text="选择受体文件夹", x=10, y=0) create_tooltip( choose_proteins.button, "选择受体文件夹。受体必须命名为preped.pdbqt\n" "单个受体请选择包含这个受体的文件夹\n" "多个受体请选择包含多个受体文件夹的文件夹\n" "详情见帮助及教程") self.choose_proteins_entry = SEntry( root=choose_protein_labelframe, textvariable=StringVar(), text=Configer.get_para("choose_docking_proteins"), x=110, y=4, width=450) create_tooltip(self.choose_proteins_entry.entry, "包含受体的文件夹") choose_proteins.bind_open_dir( entry_text=self.choose_proteins_entry.textvariable, title="选择包含pdbqt受体的文件夹")
def _create_choose_ligand_frame(self): choose_ligand_labelframe = LabelFrame(self.root, text="输入选项") choose_ligand_labelframe.place(x=10, y=10, width=570, height=85) # 选择输入配体的格式 SLabel(root=choose_ligand_labelframe, text="输入格式:", x=10, y=0) input_format_text = ("mol", "sdf", "mol2", "pdb", "pdbqt", "xyz") self.input_format = SCombbox( root=choose_ligand_labelframe, textvariable=StringVar(), values=input_format_text, default_value=Configer.get_para("input_format"), x=80, y=0, width=60) create_tooltip(self.input_format.combobox, "导入配体的格式") choose_ligands_button = SButton(choose_ligand_labelframe, text="选择单/多个配体", x=10, y=30) create_tooltip(choose_ligands_button.button, "选择一个或者多个所选格式的配体") choose_ligand_dir_button = SButton(choose_ligand_labelframe, text="选择文件夹", x=110, y=30) create_tooltip(choose_ligand_dir_button.button, "选择包含配体的文件夹,匹配其中所选格式的文件") self.choose_ligands_entry = SEntry( root=choose_ligand_labelframe, textvariable=StringVar(), text=Configer.get_para("choose_ligands"), x=200, y=34, width=360) create_tooltip(self.choose_ligands_entry.entry, "所选的配体或者包含配体的目录") choose_ligands_button.bind_open_files( entry_text=self.choose_ligands_entry.textvariable, title="选择单/多个配体", file_type=self.input_format.textvariable) choose_ligand_dir_button.bind_open_dir( entry_text=self.choose_ligands_entry.textvariable, title="选择包含配体文件的文件夹")
def gen_smi(self, event): self.windows = STopLevel(self.root, win_x=570, win_y=100, title="分子生成器").toplevel # 输入smi SLabel(self.windows, text="输入smi", x=10, y=10) self.input_smi_entry = SEntry(self.windows, textvariable=StringVar(), text=Configer.get_para("input_smi") if self.input_smi == "" else self.input_smi, x=80, y=13, width=470) create_tooltip(self.input_smi_entry.entry, "输入含有[R]的smi文本") # 输出目录 output_button = SButton(self.windows, text="选择输出目录", x=10, y=50) create_tooltip(output_button.button, "选择衍生物输出的目录") self.output_path_entry = SEntry( self.windows, textvariable=StringVar(), text=Configer.get_para("mol_output_path") if self.output_path == "" else self.output_path, x=100, y=53, width=360) create_tooltip(self.output_path_entry.entry, "选择衍生物mol的输出目录") output_button.bind_open_dir( entry_text=self.output_path_entry.textvariable, title="选择衍生物输出目录", parent=self.windows) gen_button = SButton(self.windows, "生成衍生物", x=465, y=50) create_tooltip(gen_button.button, "开始生成衍生物") gen_button.button.bind("<Button-1>", self._gen_smi) # 关闭窗口保存参数 self.windows.protocol( "WM_DELETE_WINDOW", lambda: self.save_smi( self.windows, self.input_smi_entry.textvariable.get(), self.output_path_entry.textvariable.get()))
def _create_option_frame(self): option_label_frame = LabelFrame(self.root, text="可选") option_label_frame.place(x=340, y=10, width=240, height=120) # exhaustiveness SLabel(option_label_frame, text="exhaustiveness = ", x=10, y=5) self.exhaustiveness = SEntry(option_label_frame, textvariable=StringVar(), text=Configer.get_para("exhaustiveness"), x=140, y=5, width=20) create_tooltip(self.exhaustiveness.entry, "搜索度,越大耗时越长,建议保持默认") # num_modes SLabel(option_label_frame, text="num_modes = ", x=10, y=35) self.num_modes = SEntry(option_label_frame, textvariable=StringVar(), text=Configer.get_para("num_modes"), x=140, y=35, width=20) create_tooltip(self.num_modes.entry, "最多生成多少种结合模式") # energy_range SLabel(option_label_frame, text="energy_range = ", x=10, y=65) self.energy_range = SEntry(option_label_frame, textvariable=StringVar(), text=Configer.get_para("energy_range"), x=140, y=65, width=20) create_tooltip(self.energy_range.entry, "最大最小结合模式能量差") # 恢复默认值 default_button = SButton(option_label_frame, text="默认", x=170, y=62, width=60) default_button.button.bind("<Button-1>", self._change_default) create_tooltip(default_button.button, "恢复默认值")
def create_buttons(self): gen_smi_button = SButton(self.root, text="分子生成器", x=10, y=10) create_tooltip(gen_smi_button.button, "根据smi生成不同取代基衍生物") gen_smi_button.button.bind("<Button-1>", self.gen_smi) cal_rmsd_button = SButton(self.root, text="计算小分子RMSD", x=110, y=10) create_tooltip(cal_rmsd_button.button, "计算两个小分子之间的RMSD值。") cal_rmsd_button.button.bind("<Button-1>", self.cal_rmsd) vina_validate_button = SButton(self.root, text="Vina一键验证", x=230, y=10) create_tooltip(vina_validate_button.button, "一键验证某个含有配体的蛋白是否可以用于Vina对接。") vina_validate_button.button.bind("<Button-1>", self.vina_validate)