338 else: |
338 else: |
339 itm = QTreeWidgetItem(self.programsList, [description]) |
339 itm = QTreeWidgetItem(self.programsList, [description]) |
340 font = itm.font(0) |
340 font = itm.font(0) |
341 font.setBold(True) |
341 font.setBold(True) |
342 itm.setFont(0, font) |
342 itm.setFont(0, font) |
|
343 rememberedExe = exe |
343 if not exe: |
344 if not exe: |
344 itm.setText(1, self.tr("(not configured)")) |
345 itm.setText(1, self.tr("(not configured)")) |
345 else: |
346 else: |
346 if os.path.isabs(exe): |
347 if os.path.isabs(exe): |
347 if not Utilities.isExecutable(exe): |
348 if not Utilities.isExecutable(exe): |
365 output = str(proc.readAllStandardOutput(), |
366 output = str(proc.readAllStandardOutput(), |
366 Preferences.getSystem("IOEncoding"), |
367 Preferences.getSystem("IOEncoding"), |
367 'replace') |
368 'replace') |
368 if exeModule and exeModule[0] == "-m" and \ |
369 if exeModule and exeModule[0] == "-m" and \ |
369 ("ImportError:" in output or |
370 ("ImportError:" in output or |
370 "ModuleNotFoundError:" in output): |
371 "ModuleNotFoundError:" in output or |
|
372 proc.exitCode() != 0): |
371 version = self.tr("(module not found)") |
373 version = self.tr("(module not found)") |
372 else: |
374 else: |
373 if versionRe is None: |
375 if versionRe is None: |
374 versionRe = "^{0}".format( |
376 versionRe = "^{0}".format( |
375 re.escape(versionStartsWith)) |
377 re.escape(versionStartsWith)) |
396 version]) |
398 version]) |
397 else: |
399 else: |
398 QTreeWidgetItem(itm, [exe, version]) |
400 QTreeWidgetItem(itm, [exe, version]) |
399 itm.setExpanded(True) |
401 itm.setExpanded(True) |
400 else: |
402 else: |
401 itm.setText(1, self.tr("(not found)")) |
403 if itm.childCount() == 0: |
|
404 itm.setText(1, self.tr("(not found)")) |
|
405 else: |
|
406 QTreeWidgetItem(itm, [rememberedExe, |
|
407 self.tr("(not found)")]) |
|
408 itm.setExpanded(True) |
402 QApplication.processEvents() |
409 QApplication.processEvents() |
403 self.programsList.header().resizeSections(QHeaderView.ResizeToContents) |
410 self.programsList.header().resizeSections(QHeaderView.ResizeToContents) |
404 self.programsList.header().setStretchLastSection(True) |
411 self.programsList.header().setStretchLastSection(True) |
405 return version |
412 return version |
406 |
413 |