class SetRunParameters(QtGui.QLabel): def __init__(self, projectSettings, projectPathDict, useData, parent=None): QtGui.QLabel.__init__(self, parent) self.setMinimumSize(400, 220) self.setBackgroundRole(QtGui.QPalette.Background) self.setAutoFillBackground(True) self.setObjectName("containerLabel") self.setStyleSheet(StyleSheet.toolWidgetStyle) self.projectSettings = projectSettings self.useData = useData self.projectPathDict = projectPathDict mainLayout = QtGui.QVBoxLayout() hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) label = QtGui.QLabel("Run Parameters") label.setObjectName("toolWidgetNameLabel") hbox.addWidget(label) hbox.addStretch(1) self.hideButton = QtGui.QToolButton() self.hideButton.setAutoRaise(True) self.hideButton.setIcon( QtGui.QIcon(os.path.join("Resources", "images", "cross_"))) self.hideButton.clicked.connect(self.hide) hbox.addWidget(self.hideButton) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.runTypeBox = QtGui.QComboBox() self.runTypeBox.addItem("Run") self.runTypeBox.addItem("Profiler") self.runTypeBox.addItem("Trace") if self.projectSettings["RunType"] == 'Profiler': self.runTypeBox.setCurrentIndex(1) elif self.projectSettings["RunType"] == 'Trace': self.runTypeBox.setCurrentIndex(2) self.runTypeBox.currentIndexChanged.connect(self.saveArguments) self.runTypeBox.currentIndexChanged.connect(self.runTypeChanged) hbox.addWidget(self.runTypeBox) self.traceTypeBox = QtGui.QComboBox() self.traceTypeBox.addItem("Calling relationships") self.traceTypeBox.addItem("Functions called") self.traceTypeBox.addItem("Times lines are called") self.traceTypeBox.addItem("View currently running line of code") self.traceTypeBox.setCurrentIndex( int(self.projectSettings["TraceType"])) self.traceTypeBox.currentIndexChanged.connect(self.saveArguments) hbox.addWidget(self.traceTypeBox) if self.runTypeBox.currentIndex() != 2: self.traceTypeBox.hide() self.runWithArgsBox = QtGui.QCheckBox("Arguments:") if self.projectSettings["RunWithArguments"] == 'True': self.runWithArgsBox.setChecked(True) self.runWithArgsBox.toggled.connect(self.saveArguments) mainLayout.addWidget(self.runWithArgsBox) self.argumentsLine = PathLineEdit() self.argumentsLine.setText(self.projectSettings["RunArguments"]) self.argumentsLine.textChanged.connect(self.saveArguments) mainLayout.addWidget(self.argumentsLine) hbox = QtGui.QHBoxLayout() self.clearOutputBox = QtGui.QCheckBox("Clear output window") if self.projectSettings["ClearOutputWindowOnRun"] == 'True': self.clearOutputBox.setChecked(True) self.clearOutputBox.toggled.connect(self.saveArguments) hbox.addWidget(self.clearOutputBox) hbox.addStretch(1) hbox.addWidget(QtGui.QLabel("Max Output Size <lines>")) self.bufferSizeBox = QtGui.QSpinBox() self.bufferSizeBox.setMaximum(999) self.bufferSizeBox.setMinimumWidth(100) self.bufferSizeBox.setValue(int(self.projectSettings['BufferSize'])) self.bufferSizeBox.valueChanged.connect(self.saveArguments) hbox.addWidget(self.bufferSizeBox) mainLayout.addLayout(hbox) self.runPointBox = QtGui.QComboBox() self.runPointBox.addItem("Internal Console") self.runPointBox.addItem("External Console") if self.projectSettings["RunInternal"] == 'False': self.runPointBox.setCurrentIndex(1) self.runPointBox.currentIndexChanged.connect(self.saveArguments) mainLayout.addWidget(self.runPointBox) self.useVirtualEnvBox = QtGui.QCheckBox("Use Virtual Environment") if self.projectSettings["UseVirtualEnv"] == 'True': self.useVirtualEnvBox.setChecked(True) self.useVirtualEnvBox.toggled.connect(self.setDefaultInterpreter) mainLayout.addWidget(self.useVirtualEnvBox) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.installedPythonVersionBox = QtGui.QComboBox() self.installedPythonVersionBox.setMinimumWidth(200) self.updateInstalledInterpreters() self.installedPythonVersionBox.currentIndexChanged.connect( self.setDefaultInterpreter) hbox.addWidget(self.installedPythonVersionBox) hbox.addStretch(1) label = QtGui.QLabel("Installed Python") hbox.addWidget(label) self.setLayout(mainLayout) self.setDefaultInterpreter() def updateInstalledInterpreters(self): self.installedPythonVersionBox.clear() if len(self.useData.SETTINGS["InstalledInterpreters"]) > 0: for i in self.useData.SETTINGS["InstalledInterpreters"]: self.installedPythonVersionBox.addItem(i) if self.projectSettings["UseVirtualEnv"] == 'False': index = self.installedPythonVersionBox.findText( self.projectSettings["DefaultInterpreter"]) if index != -1: self.installedPythonVersionBox.setCurrentIndex(index) else: self.installedPythonVersionBox.addItem("<No Python installed>") def runTypeChanged(self, index): if index == 2: self.traceTypeBox.show() else: self.traceTypeBox.hide() def saveArguments(self): self.projectSettings["RunWithArguments"] = str( self.runWithArgsBox.isChecked()) self.projectSettings["RunArguments"] = self.argumentsLine.text().strip( ) self.projectSettings["ClearOutputWindowOnRun"] = str( self.clearOutputBox.isChecked()) self.projectSettings["BufferSize"] = str(self.bufferSizeBox.value()) self.projectSettings["RunType"] = self.runTypeBox.currentText() self.projectSettings["RunInternal"] = str( self.runPointBox.currentIndex() == 0) self.projectSettings["TraceType"] = str( self.traceTypeBox.currentIndex()) def setDefaultInterpreter(self): if self.useVirtualEnvBox.isChecked(): # FIXME: Needs to be corrected for each platform if sys.platform == 'win32': self.projectSettings["DefaultInterpreter"] = \ os.path.join(self.projectPathDict["venvdir"], "Scripts", "python.exe") elif sys.platform == 'darwin': self.projectSettings["DefaultInterpreter"] = \ os.path.join(self.projectPathDict["venvdir"], "Scripts", "python.exe") else: self.projectSettings["DefaultInterpreter"] = \ os.path.join(self.projectPathDict["venvdir"], "Scripts", "python.exe") else: if len(self.useData.SETTINGS["InstalledInterpreters"]) > 0: self.projectSettings["DefaultInterpreter"] = \ self.installedPythonVersionBox.currentText() else: self.projectSettings["DefaultInterpreter"] = 'None' self.projectSettings["UseVirtualEnv"] = str( self.useVirtualEnvBox.isChecked())
class SetRunParameters(QtGui.QLabel): def __init__(self, projectData, useData, parent=None): QtGui.QLabel.__init__(self, parent) self.setMinimumSize(400, 280) self.setBackgroundRole(QtGui.QPalette.Background) self.setAutoFillBackground(True) self.projectData = projectData self.useData = useData mainLayout = QtGui.QVBoxLayout() label = QtGui.QLabel("Run Parameters") label.setStyleSheet("font: 14px; color: grey;") mainLayout.addWidget(label) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.runTypeBox = QtGui.QComboBox() self.runTypeBox.addItem("Run") self.runTypeBox.addItem("Profiler") self.runTypeBox.addItem("Trace") if self.projectData["RunType"] == 'Profiler': self.runTypeBox.setCurrentIndex(1) elif self.projectData["RunType"] == 'Trace': self.runTypeBox.setCurrentIndex(2) self.runTypeBox.currentIndexChanged.connect(self.saveArguments) self.runTypeBox.currentIndexChanged.connect(self.runTypeChanged) hbox.addWidget(self.runTypeBox) self.traceTypeBox = QtGui.QComboBox() self.traceTypeBox.addItem("Calling relationships") self.traceTypeBox.addItem("Functions called") self.traceTypeBox.addItem("Times lines are called") self.traceTypeBox.addItem("View currently running line of code") self.traceTypeBox.setCurrentIndex(int(self.projectData["TraceType"])) self.traceTypeBox.currentIndexChanged.connect(self.saveArguments) hbox.addWidget(self.traceTypeBox) if self.runTypeBox.currentIndex() != 2: self.traceTypeBox.hide() frame = QtGui.QFrame() frame.setFrameShape(QtGui.QFrame.HLine) frame.setFrameShadow(QtGui.QFrame.Sunken) mainLayout.addWidget(frame) self.runWithArgsBox = QtGui.QCheckBox("Arguments:") if self.projectData["RunWithArguments"] == 'True': self.runWithArgsBox.setChecked(True) self.runWithArgsBox.toggled.connect(self.saveArguments) mainLayout.addWidget(self.runWithArgsBox) self.argumentsLine = PathLineEdit() self.argumentsLine.setText(self.projectData["RunArguments"]) self.argumentsLine.textChanged.connect(self.saveArguments) mainLayout.addWidget(self.argumentsLine) hbox = QtGui.QHBoxLayout() self.clearOutputBox = QtGui.QCheckBox("Clear output window") if self.projectData["ClearOutputWindowOnRun"] == 'True': self.clearOutputBox.setChecked(True) self.clearOutputBox.toggled.connect(self.saveArguments) hbox.addWidget(self.clearOutputBox) hbox.addStretch(1) hbox.addWidget(QtGui.QLabel("Max Output Size <lines>")) self.bufferSizeBox = QtGui.QSpinBox() self.bufferSizeBox.setMaximum(999) self.bufferSizeBox.setMinimumWidth(100) self.bufferSizeBox.setValue(int(self.projectData['BufferSize'])) self.bufferSizeBox.valueChanged.connect(self.saveArguments) hbox.addWidget(self.bufferSizeBox) mainLayout.addLayout(hbox) self.runPointBox = QtGui.QComboBox() self.runPointBox.addItem("Internal Console") self.runPointBox.addItem("External Console") if self.projectData["RunInternal"] == 'False': self.runPointBox.setCurrentIndex(1) self.runPointBox.currentIndexChanged.connect(self.saveArguments) mainLayout.addWidget(self.runPointBox) self.useVirtualEnvBox = QtGui.QCheckBox("Use Virtual Environment:") if self.projectData["UseVirtualEnv"] == 'True': self.useVirtualEnvBox.setChecked(True) self.useVirtualEnvBox.toggled.connect(self.setDefaultInterpreter) mainLayout.addWidget(self.useVirtualEnvBox) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.venvBox = QtGui.QComboBox() self.venvBox.setMinimumWidth(200) hbox.addWidget(self.venvBox) self.venvVersionLabel = QtGui.QLabel() hbox.addWidget(self.venvVersionLabel) hbox.addStretch(1) label = QtGui.QLabel("Virtual Environment") hbox.addWidget(label) self.updateVirtualInterpreters() self.venvBox.currentIndexChanged.connect(self.setDefaultInterpreter) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.installedPythonVersionBox = QtGui.QComboBox() self.installedPythonVersionBox.setMinimumWidth(200) self.updateInstalledInterpreters() self.installedPythonVersionBox.currentIndexChanged.connect( self.setDefaultInterpreter) hbox.addWidget(self.installedPythonVersionBox) hbox.addStretch(1) label = QtGui.QLabel("Installed Python") hbox.addWidget(label) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) hbox.addStretch(1) self.okButton = QtGui.QPushButton("Close") self.okButton.clicked.connect(self.hide) hbox.addWidget(self.okButton) self.setLayout(mainLayout) self.setDefaultInterpreter() def updateInstalledInterpreters(self): self.installedPythonVersionBox.clear() if len(self.useData.SETTINGS["InstalledInterpreters"]) > 0: for key, value in self.useData.SETTINGS[ "InstalledInterpreters"].items(): self.installedPythonVersionBox.addItem(key) else: self.installedPythonVersionBox.addItem("<No Python installed>") def runTypeChanged(self, index): if index == 2: self.traceTypeBox.show() else: self.traceTypeBox.hide() def saveArguments(self): self.projectData["RunWithArguments"] = str( self.runWithArgsBox.isChecked()) self.projectData["RunArguments"] = self.argumentsLine.text().strip() self.projectData["ClearOutputWindowOnRun"] = str( self.clearOutputBox.isChecked()) self.projectData["BufferSize"] = str(self.bufferSizeBox.value()) self.projectData["RunType"] = self.runTypeBox.currentText() self.projectData["RunInternal"] = str( self.runPointBox.currentIndex() == 0) self.projectData["TraceType"] = str(self.traceTypeBox.currentIndex()) def getVesionFromVenv(self): venv = self.venvBox.currentText() path = os.path.join(self.projectData["venvdir"], venv, 'pyvenv.cfg') tempList = [] file = open(path, 'r') for i in file.readlines(): v = i.strip() if v == '': pass else: tempList.append(tuple(v.split(' = '))) file.close() settings = dict(tempList) return settings['version'] def updateVirtualInterpreters(self): self.venvBox.clear() for venv in os.listdir(self.projectData["venvdir"]): path = os.path.join(self.projectData["venvdir"], venv) if 'pyvenv.cfg' in os.listdir(path): self.venvBox.addItem(venv) if self.venvBox.count() > 0: index = self.venvBox.findText(self.projectData["DefaultVenv"]) if index != -1: self.venvBox.setCurrentIndex(index) venv = self.venvBox.currentText() self.projectData["DefaultVenv"] = venv self.venvVersionLabel.setText(self.getVesionFromVenv()) else: self.projectData["DefaultVenv"] = 'None' self.venvBox.addItem("<No Virtual Environment>") self.venvVersionLabel.clear() def setDefaultInterpreter(self): venv = self.venvBox.currentText() self.projectData["DefaultVenv"] = venv self.venvVersionLabel.setText(self.getVesionFromVenv()) if self.useVirtualEnvBox.isChecked(): self.projectData["DefaultInterpreter"] = \ os.path.join(self.projectData["venvdir"], venv, "Scripts", "python.exe") else: if len(self.useData.SETTINGS["InstalledInterpreters"]) > 0: self.projectData["DefaultInterpreter"] = \ self.useData.SETTINGS["InstalledInterpreters"][ self.installedPythonVersionBox.currentText()] else: self.projectData["DefaultInterpreter"] = 'None' self.projectData["UseVirtualEnv"] = str( self.useVirtualEnvBox.isChecked())
class SetRunParameters(QtGui.QLabel): def __init__(self, projectSettings, projectPathDict, useData, parent=None): QtGui.QLabel.__init__(self, parent) self.setMinimumSize(400, 220) self.setBackgroundRole(QtGui.QPalette.Background) self.setAutoFillBackground(True) self.setObjectName("containerLabel") self.setStyleSheet(StyleSheet.toolWidgetStyle) self.projectSettings = projectSettings self.useData = useData self.projectPathDict = projectPathDict mainLayout = QtGui.QVBoxLayout() hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) label = QtGui.QLabel("Run Parameters") label.setObjectName("toolWidgetNameLabel") hbox.addWidget(label) hbox.addStretch(1) self.hideButton = QtGui.QToolButton() self.hideButton.setAutoRaise(True) self.hideButton.setIcon( QtGui.QIcon(os.path.join("Resources", "images", "cross_"))) self.hideButton.clicked.connect(self.hide) hbox.addWidget(self.hideButton) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.runTypeBox = QtGui.QComboBox() self.runTypeBox.addItem("Run") self.runTypeBox.addItem("Profiler") self.runTypeBox.addItem("Trace") if self.projectSettings["RunType"] == 'Profiler': self.runTypeBox.setCurrentIndex(1) elif self.projectSettings["RunType"] == 'Trace': self.runTypeBox.setCurrentIndex(2) self.runTypeBox.currentIndexChanged.connect(self.saveArguments) self.runTypeBox.currentIndexChanged.connect(self.runTypeChanged) hbox.addWidget(self.runTypeBox) self.traceTypeBox = QtGui.QComboBox() self.traceTypeBox.addItem("Calling relationships") self.traceTypeBox.addItem("Functions called") self.traceTypeBox.addItem("Times lines are called") self.traceTypeBox.addItem("View currently running line of code") self.traceTypeBox.setCurrentIndex(int( self.projectSettings["TraceType"])) self.traceTypeBox.currentIndexChanged.connect(self.saveArguments) hbox.addWidget(self.traceTypeBox) if self.runTypeBox.currentIndex() != 2: self.traceTypeBox.hide() self.runWithArgsBox = QtGui.QCheckBox("Arguments:") if self.projectSettings["RunWithArguments"] == 'True': self.runWithArgsBox.setChecked(True) self.runWithArgsBox.toggled.connect(self.saveArguments) mainLayout.addWidget(self.runWithArgsBox) self.argumentsLine = PathLineEdit() self.argumentsLine.setText(self.projectSettings["RunArguments"]) self.argumentsLine.textChanged.connect(self.saveArguments) mainLayout.addWidget(self.argumentsLine) hbox = QtGui.QHBoxLayout() self.clearOutputBox = QtGui.QCheckBox("Clear Output Window") if self.projectSettings["ClearOutputWindowOnRun"] == 'True': self.clearOutputBox.setChecked(True) self.clearOutputBox.toggled.connect(self.saveArguments) hbox.addWidget(self.clearOutputBox) hbox.addStretch(1) hbox.addWidget(QtGui.QLabel("Max Output Size <lines>")) self.bufferSizeBox = QtGui.QSpinBox() self.bufferSizeBox.setMaximum(999) self.bufferSizeBox.setMinimumWidth(100) self.bufferSizeBox.setValue(int(self.projectSettings['BufferSize'])) self.bufferSizeBox.valueChanged.connect(self.saveArguments) hbox.addWidget(self.bufferSizeBox) mainLayout.addLayout(hbox) self.runPointBox = QtGui.QComboBox() self.runPointBox.addItem("Internal Console") self.runPointBox.addItem("External Console") if self.projectSettings["RunInternal"] == 'False': self.runPointBox.setCurrentIndex(1) self.runPointBox.currentIndexChanged.connect(self.saveArguments) mainLayout.addWidget(self.runPointBox) self.useVirtualEnvBox = QtGui.QCheckBox("Use Virtual Environment") if self.projectSettings["UseVirtualEnv"] == 'True': self.useVirtualEnvBox.setChecked(True) self.useVirtualEnvBox.toggled.connect(self.setDefaultInterpreter) mainLayout.addWidget(self.useVirtualEnvBox) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) label = QtGui.QLabel("Python Interpreter") hbox.addWidget(label) hbox.addStretch(1) self.installedPythonVersionBox = QtGui.QComboBox() self.installedPythonVersionBox.setMinimumWidth(200) self.updateInstalledInterpreters() self.installedPythonVersionBox.currentIndexChanged.connect( self.setDefaultInterpreter) hbox.addWidget(self.installedPythonVersionBox) self.setLayout(mainLayout) self.setDefaultInterpreter() def updateInstalledInterpreters(self): self.installedPythonVersionBox.clear() if len(self.useData.SETTINGS["InstalledInterpreters"]) > 0: for i in self.useData.SETTINGS["InstalledInterpreters"]: self.installedPythonVersionBox.addItem(i) if self.projectSettings["UseVirtualEnv"] == 'False': index = self.installedPythonVersionBox.findText( self.projectSettings["DefaultInterpreter"]) if index != -1: self.installedPythonVersionBox.setCurrentIndex(index) else: self.installedPythonVersionBox.addItem("<No Python installed>") def runTypeChanged(self, index): if index == 2: self.traceTypeBox.show() else: self.traceTypeBox.hide() def saveArguments(self): self.projectSettings["RunWithArguments"] = str( self.runWithArgsBox.isChecked()) self.projectSettings[ "RunArguments"] = self.argumentsLine.text().strip() self.projectSettings["ClearOutputWindowOnRun"] = str( self.clearOutputBox.isChecked()) self.projectSettings["BufferSize"] = str(self.bufferSizeBox.value()) self.projectSettings["RunType"] = self.runTypeBox.currentText() self.projectSettings["RunInternal"] = str( self.runPointBox.currentIndex() == 0) self.projectSettings["TraceType"] = str( self.traceTypeBox.currentIndex()) def setDefaultInterpreter(self): if self.useVirtualEnvBox.isChecked(): # FIXME: Needs to be corrected for each platform if sys.platform == 'win32': self.projectSettings["DefaultInterpreter"] = \ os.path.join(self.projectPathDict["venvdir"], "Scripts", "python.exe") elif sys.platform == 'darwin': self.projectSettings["DefaultInterpreter"] = \ os.path.join(self.projectPathDict["venvdir"], "Scripts", "python.exe") else: self.projectSettings["DefaultInterpreter"] = \ os.path.join(self.projectPathDict["venvdir"], "Scripts", "python.exe") else: if len(self.useData.SETTINGS["InstalledInterpreters"]) > 0: self.projectSettings["DefaultInterpreter"] = \ self.installedPythonVersionBox.currentText() else: self.projectSettings["DefaultInterpreter"] = 'None' self.projectSettings["UseVirtualEnv"] = str( self.useVirtualEnvBox.isChecked())
class SetRunParameters(QtGui.QLabel): def __init__(self, projectData, useData, parent=None): QtGui.QLabel.__init__(self, parent) self.setMinimumSize(400, 280) self.setBackgroundRole(QtGui.QPalette.Background) self.setAutoFillBackground(True) self.projectData = projectData self.useData = useData mainLayout = QtGui.QVBoxLayout() label = QtGui.QLabel("Run Parameters") label.setStyleSheet("font: 14px; color: grey;") mainLayout.addWidget(label) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.runTypeBox = QtGui.QComboBox() self.runTypeBox.addItem("Run") self.runTypeBox.addItem("Profiler") self.runTypeBox.addItem("Trace") if self.projectData["RunType"] == 'Profiler': self.runTypeBox.setCurrentIndex(1) elif self.projectData["RunType"] == 'Trace': self.runTypeBox.setCurrentIndex(2) self.runTypeBox.currentIndexChanged.connect(self.saveArguments) self.runTypeBox.currentIndexChanged.connect(self.runTypeChanged) hbox.addWidget(self.runTypeBox) self.traceTypeBox = QtGui.QComboBox() self.traceTypeBox.addItem("Calling relationships") self.traceTypeBox.addItem("Functions called") self.traceTypeBox.addItem("Times lines are called") self.traceTypeBox.addItem("View currently running line of code") self.traceTypeBox.setCurrentIndex(int( self.projectData["TraceType"])) self.traceTypeBox.currentIndexChanged.connect(self.saveArguments) hbox.addWidget(self.traceTypeBox) if self.runTypeBox.currentIndex() != 2: self.traceTypeBox.hide() frame = QtGui.QFrame() frame.setFrameShape(QtGui.QFrame.HLine) frame.setFrameShadow(QtGui.QFrame.Sunken) mainLayout.addWidget(frame) self.runWithArgsBox = QtGui.QCheckBox("Arguments:") if self.projectData["RunWithArguments"] == 'True': self.runWithArgsBox.setChecked(True) self.runWithArgsBox.toggled.connect(self.saveArguments) mainLayout.addWidget(self.runWithArgsBox) self.argumentsLine = PathLineEdit() self.argumentsLine.setText(self.projectData["RunArguments"]) self.argumentsLine.textChanged.connect(self.saveArguments) mainLayout.addWidget(self.argumentsLine) hbox = QtGui.QHBoxLayout() self.clearOutputBox = QtGui.QCheckBox("Clear output window") if self.projectData["ClearOutputWindowOnRun"] == 'True': self.clearOutputBox.setChecked(True) self.clearOutputBox.toggled.connect(self.saveArguments) hbox.addWidget(self.clearOutputBox) hbox.addStretch(1) hbox.addWidget(QtGui.QLabel("Max Output Size <lines>")) self.bufferSizeBox = QtGui.QSpinBox() self.bufferSizeBox.setMaximum(999) self.bufferSizeBox.setMinimumWidth(100) self.bufferSizeBox.setValue(int(self.projectData['BufferSize'])) self.bufferSizeBox.valueChanged.connect(self.saveArguments) hbox.addWidget(self.bufferSizeBox) mainLayout.addLayout(hbox) self.runPointBox = QtGui.QComboBox() self.runPointBox.addItem("Internal Console") self.runPointBox.addItem("External Console") if self.projectData["RunInternal"] == 'False': self.runPointBox.setCurrentIndex(1) self.runPointBox.currentIndexChanged.connect(self.saveArguments) mainLayout.addWidget(self.runPointBox) self.useVirtualEnvBox = QtGui.QCheckBox("Use Virtual Environment:") if self.projectData["UseVirtualEnv"] == 'True': self.useVirtualEnvBox.setChecked(True) self.useVirtualEnvBox.toggled.connect(self.setDefaultInterpreter) mainLayout.addWidget(self.useVirtualEnvBox) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.venvBox = QtGui.QComboBox() self.venvBox.setMinimumWidth(200) hbox.addWidget(self.venvBox) self.venvVersionLabel = QtGui.QLabel() hbox.addWidget(self.venvVersionLabel) hbox.addStretch(1) label = QtGui.QLabel("Virtual Environment") hbox.addWidget(label) self.updateVirtualInterpreters() self.venvBox.currentIndexChanged.connect(self.setDefaultInterpreter) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) self.installedPythonVersionBox = QtGui.QComboBox() self.installedPythonVersionBox.setMinimumWidth(200) self.updateInstalledInterpreters() self.installedPythonVersionBox.currentIndexChanged.connect( self.setDefaultInterpreter) hbox.addWidget(self.installedPythonVersionBox) hbox.addStretch(1) label = QtGui.QLabel("Installed Python") hbox.addWidget(label) hbox = QtGui.QHBoxLayout() mainLayout.addLayout(hbox) hbox.addStretch(1) self.okButton = QtGui.QPushButton("Close") self.okButton.clicked.connect(self.hide) hbox.addWidget(self.okButton) self.setLayout(mainLayout) self.setDefaultInterpreter() def updateInstalledInterpreters(self): self.installedPythonVersionBox.clear() if len(self.useData.SETTINGS["InstalledInterpreters"]) > 0: for key, value in self.useData.SETTINGS["InstalledInterpreters"].items(): self.installedPythonVersionBox.addItem(key) else: self.installedPythonVersionBox.addItem("<No Python installed>") def runTypeChanged(self, index): if index == 2: self.traceTypeBox.show() else: self.traceTypeBox.hide() def saveArguments(self): self.projectData["RunWithArguments"] = str( self.runWithArgsBox.isChecked()) self.projectData[ "RunArguments"] = self.argumentsLine.text().strip() self.projectData["ClearOutputWindowOnRun"] = str( self.clearOutputBox.isChecked()) self.projectData["BufferSize"] = str(self.bufferSizeBox.value()) self.projectData["RunType"] = self.runTypeBox.currentText() self.projectData["RunInternal"] = str( self.runPointBox.currentIndex() == 0) self.projectData["TraceType"] = str( self.traceTypeBox.currentIndex()) def getVesionFromVenv(self): venv = self.venvBox.currentText() path = os.path.join(self.projectData["venvdir"], venv, 'pyvenv.cfg') tempList = [] file = open(path, 'r') for i in file.readlines(): v = i.strip() if v == '': pass else: tempList.append(tuple(v.split(' = '))) file.close() settings = dict(tempList) return settings['version'] def updateVirtualInterpreters(self): self.venvBox.clear() for venv in os.listdir(self.projectData["venvdir"]): path = os.path.join(self.projectData["venvdir"], venv) if 'pyvenv.cfg' in os.listdir(path): self.venvBox.addItem(venv) if self.venvBox.count() > 0: index = self.venvBox.findText(self.projectData["DefaultVenv"]) if index != -1: self.venvBox.setCurrentIndex(index) venv = self.venvBox.currentText() self.projectData["DefaultVenv"] = venv self.venvVersionLabel.setText(self.getVesionFromVenv()) else: self.projectData["DefaultVenv"] = 'None' self.venvBox.addItem("<No Virtual Environment>") self.venvVersionLabel.clear() def setDefaultInterpreter(self): venv = self.venvBox.currentText() self.projectData["DefaultVenv"] = venv self.venvVersionLabel.setText(self.getVesionFromVenv()) if self.useVirtualEnvBox.isChecked(): self.projectData["DefaultInterpreter"] = \ os.path.join(self.projectData["venvdir"], venv, "Scripts", "python.exe") else: if len(self.useData.SETTINGS["InstalledInterpreters"]) > 0: self.projectData["DefaultInterpreter"] = \ self.useData.SETTINGS["InstalledInterpreters"][ self.installedPythonVersionBox.currentText()] else: self.projectData["DefaultInterpreter"] = 'None' self.projectData["UseVirtualEnv"] = str( self.useVirtualEnvBox.isChecked())