我一直在尝试为一个项目创建GUI。我有一个“exe”文件,我需要在应用程序的后台运行,只需按下一个按钮。我使用qprocess创建了一个基于线程的函数来调用exe文件,它可以正常工作。但问题是,它冻结了GUI,并且在尝试多个文件时总是显示没有响应
是否有任何方法可以重新路由Qprocess,使其不会以某种方式阻止GUI,使我仍然可以访问Qprocess exe文件输出
编辑#1:exe文件的进程与用户提供的“配体文件”数量成比例。对于测试,我必须提供至少100个左右的文件。这会导致GUI上出现足够多的冻结,以至于任务栏上会显示not responsive
class Main(QtWidgets.QMainWindow, Ui_MainWindow):
def testMain(self):
ligands = glob.glob("*.sdf")
liglen = len(ligands)
self.files_2.setText("<b>1/{} Ligand(s)</b>".format(liglen))
x = self.progressBar.setMaximum(liglen)
t = threading.Thread(target = self.ligconv(ligands))
t.start()
def ligconv (self, ligands):
process = QProcess()
cd = "babel.exe"
for i in ligands:
tem = re.sub('\..*', '.pdbqt', i)
ligename = tem
ar = [receptorname, "-xnrcp", "-O", ligname]
process.execute(cd, ar)
后期脚本:
您正在主线程中执行
t = threading.Thread(target = self.ligconv(ligands))
,因为您的代码等效于:相反,目标必须接收可调用的,如果要传递额外的参数,则应使用args:
相关问题 更多 >
编程相关推荐