def stopSessionWithoutConfirmation(): #For data acquisition sessions, stop sampling and save to file if playMode == PlayMode.ACQUISITION: #Stop sampling tco.orderToStopSession() #Save session to file JSONConverter.endDataAcquisition() #Hide trial info label mainWindow.trialInfoLabel.hide() #Clears the session ts.currentSession = None #Resets the graph tg.resetTrialGraph() #Resets the play, stop, and lock buttons mainWindow.playButton.setIcon(playIcon) mainWindow.playButton.setEnabled(True) mainWindow.stopButton.setEnabled(False) mainWindow.lockButton.setEnabled(True) #Always go back to default acquisition mode when no session is pulled up setPlayMode(PlayMode.ACQUISITION)
def saveDisplaySettings(): global displayRate, antiAliasing, shading, colors, renderOffset #First, extract display settings from the menu displayRate = displaySettingsWrapper.displayRateSpinBox.value() antiAliasing = displaySettingsWrapper.antiAliasingCheckBox.isChecked() shading = displaySettingsWrapper.shadingCheckBox.isChecked() renderOffset = displaySettingsWrapper.renderOffsetCheckBox.isChecked() colors = (colorButtons[0].palette().button().color(), colorButtons[1].palette().button().color(), colorButtons[2].palette().button().color(), colorButtons[3].palette().button().color(), colorButtons[4].palette().button().color(), colorButtons[5].palette().button().color(), colorButtons[6].palette().button().color()) #Then, save settings to file... try: #Open the display settings file in write mode (overwrites anything already in it, no appending) displaySettingsFile = open(file="Display Settings.txt", mode="w") #Error opening the file except Exception as e: print("Error opening display settings file...\n") print(e) #Detailed error message print() #Extra empty line for spacing #Occurs if there are no problems opening the file else: displaySettingsFile.write( "Note: Don't comment this file because it is regenerated on save.") displaySettingsFile.write("\n\nrefresh rate = " + str(displayRate)) displaySettingsFile.write("\n\nanti-aliasing = " + str(antiAliasing)) displaySettingsFile.write("\nshading = " + str(shading)) displaySettingsFile.write( "\n\nbackground color = " + colors[ColorAttribute.BACKGROUND.value].name()) displaySettingsFile.write("\ndata color = " + colors[ColorAttribute.DATA.value].name()) displaySettingsFile.write("\ntext color = " + colors[ColorAttribute.TEXT.value].name()) displaySettingsFile.write("\nstimulus color = " + colors[ColorAttribute.STIMULUS.value].name()) displaySettingsFile.write("\naxis color = " + colors[ColorAttribute.AXIS.value].name()) displaySettingsFile.write("\nrender offset arrows = " + str(renderOffset)) displaySettingsFile.write("\nonset color = " + colors[ColorAttribute.ONSET.value].name()) displaySettingsFile.write("\noffset color = " + colors[ColorAttribute.OFFSET.value].name()) #Close the file when done to avoid file descriptor memory leaks displaySettingsFile.close() #Finally, apply the settings to the graph tg.updateGraphSettings()
def stopSession(): #Clears the session ts.currentSession = None #Resets the graph tg.resetGraph() #Stops playing the graph tg.setPlaying(False) #Resets the play, stop, and lock buttons mainWindow.playButton.setIcon(playIcon) mainWindow.stopButton.setEnabled(False) mainWindow.lockButton.setEnabled(True)
def stopButtonPressed(): #Pauses when stop is pressed if (tg.isPlaying()): setPlaying(not tg.isPlaying()) #Confirm that this is what the user wants confirmStop = QMessageBox() confirmStop.setText("Are you sure you want to stop the current session?") confirmStop.setWindowTitle("Confirm Stop") confirmStop.setStandardButtons(QMessageBox.Yes | QMessageBox.No) decision = confirmStop.exec() #If it is, stop the session if decision == QMessageBox.Yes: stopSession()
def loadTrial(trialNumber): #Clear current trial tg.resetTrialGraph() #Set trial number, wrapping around if trial number is out bounds if trialNumber > ts.currentSession.trialCount: ts.currentSession.currentTrial = 1 elif trialNumber < 1: ts.currentSession.currentTrial = ts.currentSession.trialCount else: ts.currentSession.currentTrial = trialNumber #Display new trial tg.createTrialGraph()
def setPlaying(play): #No pause/play in playback if playMode == PlayMode.PLAYBACK: return #Creates a session if there's not one already (there must be a current session) if not ts.currentSession: #Create session ts.currentSession = ts.TheSession(mainWindow, generatePseudoOrdering=True) #Perform set up specific to data acquisition... #Prepare session saving module JSONConverter.startDataAcquisition() #Display trial info label mainWindow.trialInfoLabel.setText("RUNNING TRIAL") mainWindow.trialInfoLabel.show() #Sets whether or not the graph is playing based off of the value of play tg.setPlaying(play) #Update play button icon if play: mainWindow.playButton.setIcon(pauseIcon) else: mainWindow.playButton.setIcon(playIcon) #Update trial info label if not tg.duringITI: if play: mainWindow.trialInfoLabel.setText("RUNNING TRIAL") else: mainWindow.trialInfoLabel.setText("TRIAL PAUSED") #Any interaction with play button means you cannot unlock the settings #...because a session must already be running mainWindow.lockButton.setEnabled(False) #The session can be stopped if the play button is interacted with #...because a session must already be running mainWindow.stopButton.setEnabled(True)
def setPlaying(play): #Gets the current session if not ts.currentSession: ts.currentSession = ts.TheSession(mainWindow) #Sets whether or not the graph is playing based off of the value of play tg.setPlaying(play) #If play is true change the icon to the pause Icon if play: mainWindow.playButton.setIcon(pauseIcon) #Otherwise set the icon to the play icon else: mainWindow.playButton.setIcon(playIcon) #Any interaction with play button means you cannot unlock the settings mainWindow.lockButton.setEnabled(False) #The session can be stopped if the play button is interacted with mainWindow.stopButton.setEnabled(True)
app = QtWidgets.QApplication(sys.argv) #Removes the "?" button from all windows #QtWidgets.QApplication.setAttribute(Qt.AA_DisableWindowContextHelpButton) #Create and set up the main window MainWindow = QtWidgets.QMainWindow() ui = mw.Ui_MainWindow() ui.setupUi(MainWindow) #If there's an error in the main process, we need special error handling to close the child process (the sampling process), so it doesn't become a zombie. sys.excepthook = mainProcessErrorHandler #Perform all necessary set up including launching the time critical (sampling) process #Comments on side indicate dependencies in ordering of start up calls dsm.initialSetUp() im.initialSetUp(ui) tg.initialSetUp(ui) #Uses DSM and IM jc.initialSetUp(ui) tco.initialSetUp() #Start of program MainWindow.show() app.exec_() #Run the main Qt Event loop (for listening to UI input) #Make sure the sampling process terminates tco.orderToStopProcess() #Exit program with no errors sys.exit(0)
def openSession(fileStr=""): #You must first close the current session if ts.currentSession: stopSessionConditionalConfirmation() #If user says no to stopping current session, then cancel opening another if ts.currentSession: return if fileStr == "": #Pop up "Open" window to retrieve file name and location of session file user wants to open. The function returns a (file name/location, file type) tuple but its indexed at 0 to just get file name fileNameAndLocation = QtGui.QFileDialog.getOpenFileName( parent=mainWindow.centralwidget, caption="Open Session For Playback", directory=JSONConverter.getSavedSessionDirectory( createIfNonexistent=True), filter="JSON (*.json)")[0] else: fileNameAndLocation = fileStr #If user didn't click cancel on "Open", proceed for opening session in playback mode if len(fileNameAndLocation) > 0: #Opening a session means going into playback mode setPlayMode(PlayMode.PLAYBACK) #Load in the session from the JSON file errorMessage = JSONConverter.openJSONFile(fileNameAndLocation, True) #Check if there was an error before proceeding if errorMessage: #Craft error message fullMessage = "Cannot read session file for the following reason...\n\n" + errorMessage #Notify user cannotReadSession = QMessageBox() cannotReadSession.setText(fullMessage) cannotReadSession.setWindowTitle("Error Opening Session") cannotReadSession.setStandardButtons(QMessageBox.Ok) cannotReadSession.setIcon(QMessageBox.Critical) cannotReadSession.setFont(popUpFont) cannotReadSession.exec() #In case a session was created, clear it (there shouldn't be though, just being safe) if ts.currentSession: stopSessionWithoutConfirmation() #Return to data acquisition mode setPlayMode(PlayMode.ACQUISITION) else: #Display the first trial of the session on the graph tg.createTrialGraph() else: #User cancelled opening a session so default back to empty, ready to start data acquisition mode setPlayMode(PlayMode.ACQUISITION)
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1324, 758) font = QtGui.QFont() font.setFamily("MS Sans Serif") MainWindow.setFont(font) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.rootHorizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget) self.rootHorizontalLayout.setObjectName("rootHorizontalLayout") self.scrollArea = QtWidgets.QScrollArea(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.scrollArea.sizePolicy().hasHeightForWidth()) self.scrollArea.setSizePolicy(sizePolicy) self.scrollArea.setMinimumSize(QtCore.QSize(500, 0)) self.scrollArea.setFocusPolicy(QtCore.Qt.NoFocus) self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 490, 801)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.formLayout_2 = QtWidgets.QFormLayout(self.scrollAreaWidgetContents) self.formLayout_2.setObjectName("formLayout_2") self.sessionSettings = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(22) font.setBold(True) font.setWeight(75) self.sessionSettings.setFont(font) self.sessionSettings.setObjectName("sessionSettings") self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.sessionSettings) self.sessionName = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.sessionName.setFont(font) self.sessionName.setObjectName("sessionName") self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.sessionName) self.sampleIntervalLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.sampleIntervalLabel.setFont(font) self.sampleIntervalLabel.setObjectName("sampleIntervalLabel") self.formLayout_2.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.sampleIntervalLabel) self.sampleIntervalSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) self.sampleIntervalSpinBox.setEnabled(True) font = QtGui.QFont() font.setPointSize(14) self.sampleIntervalSpinBox.setFont(font) self.sampleIntervalSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.sampleIntervalSpinBox.setSuffix("") self.sampleIntervalSpinBox.setMinimum(1) self.sampleIntervalSpinBox.setMaximum(1000) self.sampleIntervalSpinBox.setProperty("value", 1) self.sampleIntervalSpinBox.setObjectName("sampleIntervalSpinBox") self.formLayout_2.setWidget(7, QtWidgets.QFormLayout.FieldRole, self.sampleIntervalSpinBox) self.trialCountLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.trialCountLabel.setFont(font) self.trialCountLabel.setObjectName("trialCountLabel") self.formLayout_2.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.trialCountLabel) self.trialCountSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.trialCountSpinBox.setFont(font) self.trialCountSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.trialCountSpinBox.setMinimum(1) self.trialCountSpinBox.setMaximum(10000000) self.trialCountSpinBox.setSingleStep(5) self.trialCountSpinBox.setProperty("value", 60) self.trialCountSpinBox.setObjectName("trialCountSpinBox") self.formLayout_2.setWidget(8, QtWidgets.QFormLayout.FieldRole, self.trialCountSpinBox) spacerItem = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.formLayout_2.setItem(9, QtWidgets.QFormLayout.LabelRole, spacerItem) self.itiLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.itiLabel.setFont(font) self.itiLabel.setObjectName("itiLabel") self.formLayout_2.setWidget(10, QtWidgets.QFormLayout.LabelRole, self.itiLabel) self.itiSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.itiSpinBox.setFont(font) self.itiSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.itiSpinBox.setSuffix("") self.itiSpinBox.setMaximum(9999) self.itiSpinBox.setProperty("value", 15) self.itiSpinBox.setObjectName("itiSpinBox") self.formLayout_2.setWidget(10, QtWidgets.QFormLayout.FieldRole, self.itiSpinBox) self.itiVarianceLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.itiVarianceLabel.setFont(font) self.itiVarianceLabel.setObjectName("itiVarianceLabel") self.formLayout_2.setWidget(11, QtWidgets.QFormLayout.LabelRole, self.itiVarianceLabel) self.itiVarianceSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.itiVarianceSpinBox.setFont(font) self.itiVarianceSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.itiVarianceSpinBox.setSuffix("") self.itiVarianceSpinBox.setMaximum(9999) self.itiVarianceSpinBox.setProperty("value", 3) self.itiVarianceSpinBox.setObjectName("itiVarianceSpinBox") self.formLayout_2.setWidget(11, QtWidgets.QFormLayout.FieldRole, self.itiVarianceSpinBox) spacerItem1 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.formLayout_2.setItem(12, QtWidgets.QFormLayout.LabelRole, spacerItem1) self.trialSettings = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(22) font.setBold(True) font.setWeight(75) self.trialSettings.setFont(font) self.trialSettings.setObjectName("trialSettings") self.formLayout_2.setWidget(13, QtWidgets.QFormLayout.LabelRole, self.trialSettings) self.trialDurationLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.trialDurationLabel.setFont(font) self.trialDurationLabel.setObjectName("trialDurationLabel") self.formLayout_2.setWidget(14, QtWidgets.QFormLayout.LabelRole, self.trialDurationLabel) self.trialDurationSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.trialDurationSpinBox.setFont(font) self.trialDurationSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.trialDurationSpinBox.setSuffix("") self.trialDurationSpinBox.setMinimum(0) self.trialDurationSpinBox.setMaximum(10000000) self.trialDurationSpinBox.setSingleStep(1000) self.trialDurationSpinBox.setProperty("value", 3000) self.trialDurationSpinBox.setObjectName("trialDurationSpinBox") self.formLayout_2.setWidget(14, QtWidgets.QFormLayout.FieldRole, self.trialDurationSpinBox) self.baselineDurationLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.baselineDurationLabel.setFont(font) self.baselineDurationLabel.setObjectName("baselineDurationLabel") self.formLayout_2.setWidget(15, QtWidgets.QFormLayout.LabelRole, self.baselineDurationLabel) self.baselineDurationSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.baselineDurationSpinBox.setFont(font) self.baselineDurationSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.baselineDurationSpinBox.setSuffix("") self.baselineDurationSpinBox.setMinimum(0) self.baselineDurationSpinBox.setMaximum(10000000) self.baselineDurationSpinBox.setSingleStep(1000) self.baselineDurationSpinBox.setProperty("value", 1000) self.baselineDurationSpinBox.setObjectName("baselineDurationSpinBox") self.formLayout_2.setWidget(15, QtWidgets.QFormLayout.FieldRole, self.baselineDurationSpinBox) spacerItem2 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.formLayout_2.setItem(16, QtWidgets.QFormLayout.LabelRole, spacerItem2) self.csNameLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.csNameLabel.setFont(font) self.csNameLabel.setObjectName("csNameLabel") self.formLayout_2.setWidget(17, QtWidgets.QFormLayout.LabelRole, self.csNameLabel) self.csNameLineEdit = QtWidgets.QLineEdit(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.csNameLineEdit.setFont(font) self.csNameLineEdit.setFocusPolicy(QtCore.Qt.StrongFocus) self.csNameLineEdit.setText("") self.csNameLineEdit.setObjectName("csNameLineEdit") self.formLayout_2.setWidget(17, QtWidgets.QFormLayout.FieldRole, self.csNameLineEdit) self.csDurationLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.csDurationLabel.setFont(font) self.csDurationLabel.setObjectName("csDurationLabel") self.formLayout_2.setWidget(18, QtWidgets.QFormLayout.LabelRole, self.csDurationLabel) self.csDurationSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.csDurationSpinBox.setFont(font) self.csDurationSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.csDurationSpinBox.setSuffix("") self.csDurationSpinBox.setMinimum(0) self.csDurationSpinBox.setMaximum(10000000) self.csDurationSpinBox.setSingleStep(100) self.csDurationSpinBox.setProperty("value", 100) self.csDurationSpinBox.setObjectName("csDurationSpinBox") self.formLayout_2.setWidget(18, QtWidgets.QFormLayout.FieldRole, self.csDurationSpinBox) spacerItem3 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.formLayout_2.setItem(19, QtWidgets.QFormLayout.LabelRole, spacerItem3) self.interstimulusIntervalLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.interstimulusIntervalLabel.setFont(font) self.interstimulusIntervalLabel.setObjectName("interstimulusIntervalLabel") self.formLayout_2.setWidget(20, QtWidgets.QFormLayout.LabelRole, self.interstimulusIntervalLabel) self.interstimulusIntervalSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.interstimulusIntervalSpinBox.setFont(font) self.interstimulusIntervalSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.interstimulusIntervalSpinBox.setSuffix("") self.interstimulusIntervalSpinBox.setMaximum(10000000) self.interstimulusIntervalSpinBox.setSingleStep(500) self.interstimulusIntervalSpinBox.setProperty("value", 500) self.interstimulusIntervalSpinBox.setObjectName("interstimulusIntervalSpinBox") self.formLayout_2.setWidget(20, QtWidgets.QFormLayout.FieldRole, self.interstimulusIntervalSpinBox) spacerItem4 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.formLayout_2.setItem(21, QtWidgets.QFormLayout.LabelRole, spacerItem4) self.usNameLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setFamily("MS Sans Serif") font.setPointSize(14) self.usNameLabel.setFont(font) self.usNameLabel.setObjectName("usNameLabel") self.formLayout_2.setWidget(22, QtWidgets.QFormLayout.LabelRole, self.usNameLabel) self.usNameLineEdit = QtWidgets.QLineEdit(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.usNameLineEdit.setFont(font) self.usNameLineEdit.setFocusPolicy(QtCore.Qt.StrongFocus) self.usNameLineEdit.setText("") self.usNameLineEdit.setObjectName("usNameLineEdit") self.formLayout_2.setWidget(22, QtWidgets.QFormLayout.FieldRole, self.usNameLineEdit) self.usDurationLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setFamily("MS Sans Serif") font.setPointSize(14) self.usDurationLabel.setFont(font) self.usDurationLabel.setObjectName("usDurationLabel") self.formLayout_2.setWidget(23, QtWidgets.QFormLayout.LabelRole, self.usDurationLabel) self.usDurationSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.usDurationSpinBox.setFont(font) self.usDurationSpinBox.setFocusPolicy(QtCore.Qt.StrongFocus) self.usDurationSpinBox.setSuffix("") self.usDurationSpinBox.setMinimum(0) self.usDurationSpinBox.setMaximum(10000000) self.usDurationSpinBox.setSingleStep(100) self.usDurationSpinBox.setProperty("value", 100) self.usDurationSpinBox.setObjectName("usDurationSpinBox") self.formLayout_2.setWidget(23, QtWidgets.QFormLayout.FieldRole, self.usDurationSpinBox) self.subjectAgeLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.subjectAgeLabel.setFont(font) self.subjectAgeLabel.setObjectName("subjectAgeLabel") self.formLayout_2.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.subjectAgeLabel) self.subjectAgeSpinBox = QtWidgets.QSpinBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.subjectAgeSpinBox.setFont(font) self.subjectAgeSpinBox.setMaximum(999) self.subjectAgeSpinBox.setProperty("value", 30) self.subjectAgeSpinBox.setObjectName("subjectAgeSpinBox") self.formLayout_2.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.subjectAgeSpinBox) self.subjectSexLabel = QtWidgets.QLabel(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.subjectSexLabel.setFont(font) self.subjectSexLabel.setObjectName("subjectSexLabel") self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.subjectSexLabel) self.subjectSexComboBox = QtWidgets.QComboBox(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.subjectSexComboBox.setFont(font) self.subjectSexComboBox.setObjectName("subjectSexComboBox") self.formLayout_2.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.subjectSexComboBox) spacerItem5 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.formLayout_2.setItem(6, QtWidgets.QFormLayout.LabelRole, spacerItem5) spacerItem6 = QtWidgets.QSpacerItem(20, 5, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.formLayout_2.setItem(3, QtWidgets.QFormLayout.LabelRole, spacerItem6) self.sessionNameLineEdit = QtWidgets.QLineEdit(self.scrollAreaWidgetContents) font = QtGui.QFont() font.setPointSize(14) self.sessionNameLineEdit.setFont(font) self.sessionNameLineEdit.setMaxLength(12) self.sessionNameLineEdit.setObjectName("sessionNameLineEdit") self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.sessionNameLineEdit) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.rootHorizontalLayout.addWidget(self.scrollArea) self.middleVerticalLine = QtWidgets.QFrame(self.centralwidget) self.middleVerticalLine.setFrameShape(QtWidgets.QFrame.VLine) self.middleVerticalLine.setFrameShadow(QtWidgets.QFrame.Raised) self.middleVerticalLine.setLineWidth(2) self.middleVerticalLine.setMidLineWidth(0) self.middleVerticalLine.setObjectName("middleVerticalLine") self.rootHorizontalLayout.addWidget(self.middleVerticalLine) self.rightSide = QtWidgets.QVBoxLayout() self.rightSide.setObjectName("rightSide") self.graphButtonLayout = QtWidgets.QHBoxLayout() self.graphButtonLayout.setObjectName("graphButtonLayout") self.lockButton = QtWidgets.QPushButton(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.lockButton.sizePolicy().hasHeightForWidth()) self.lockButton.setSizePolicy(sizePolicy) self.lockButton.setFocusPolicy(QtCore.Qt.StrongFocus) self.lockButton.setText("") icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("Images/Unlocked Button.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.lockButton.setIcon(icon) self.lockButton.setIconSize(QtCore.QSize(100, 75)) self.lockButton.setObjectName("lockButton") self.graphButtonLayout.addWidget(self.lockButton) self.playButton = QtWidgets.QPushButton(self.centralwidget) self.playButton.setEnabled(False) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.playButton.sizePolicy().hasHeightForWidth()) self.playButton.setSizePolicy(sizePolicy) self.playButton.setFocusPolicy(QtCore.Qt.StrongFocus) self.playButton.setAutoFillBackground(False) self.playButton.setText("") icon1 = QtGui.QIcon() icon1.addPixmap(QtGui.QPixmap("Images/Play Button.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.playButton.setIcon(icon1) self.playButton.setIconSize(QtCore.QSize(100, 75)) self.playButton.setCheckable(False) self.playButton.setObjectName("playButton") self.graphButtonLayout.addWidget(self.playButton) spacerItem7 = QtWidgets.QSpacerItem(75, 10, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.graphButtonLayout.addItem(spacerItem7) self.stopButton = QtWidgets.QPushButton(self.centralwidget) self.stopButton.setEnabled(False) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.stopButton.sizePolicy().hasHeightForWidth()) self.stopButton.setSizePolicy(sizePolicy) self.stopButton.setFocusPolicy(QtCore.Qt.ClickFocus) self.stopButton.setText("") icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap("Images/Stop Button.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.stopButton.setIcon(icon2) self.stopButton.setIconSize(QtCore.QSize(100, 75)) self.stopButton.setObjectName("stopButton") self.graphButtonLayout.addWidget(self.stopButton) spacerItem8 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.graphButtonLayout.addItem(spacerItem8) self.sessionInfoLabel = QtWidgets.QLabel(self.centralwidget) font = QtGui.QFont() font.setPointSize(16) font.setBold(True) font.setWeight(75) self.sessionInfoLabel.setFont(font) self.sessionInfoLabel.setAlignment(QtCore.Qt.AlignCenter) self.sessionInfoLabel.setObjectName("sessionInfoLabel") self.graphButtonLayout.addWidget(self.sessionInfoLabel) spacerItem9 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.graphButtonLayout.addItem(spacerItem9) spacerItem10 = QtWidgets.QSpacerItem(20, 100, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.graphButtonLayout.addItem(spacerItem10) self.rightSide.addLayout(self.graphButtonLayout) self.horizontalLine = QtWidgets.QFrame(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.horizontalLine.sizePolicy().hasHeightForWidth()) self.horizontalLine.setSizePolicy(sizePolicy) self.horizontalLine.setFrameShape(QtWidgets.QFrame.HLine) self.horizontalLine.setFrameShadow(QtWidgets.QFrame.Sunken) self.horizontalLine.setObjectName("horizontalLine") self.rightSide.addWidget(self.horizontalLine) self.graphWidget = GraphicsLayoutWidget(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.graphWidget.sizePolicy().hasHeightForWidth()) self.graphWidget.setSizePolicy(sizePolicy) self.graphWidget.setObjectName("graphWidget") self.rightSide.addWidget(self.graphWidget) self.rootHorizontalLayout.addLayout(self.rightSide) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1324, 37)) font = QtGui.QFont() font.setPointSize(14) self.menubar.setFont(font) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.menuEdit = QtWidgets.QMenu(self.menubar) self.menuEdit.setObjectName("menuEdit") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.actionOpen = QtWidgets.QAction(MainWindow) font = QtGui.QFont() font.setPointSize(14) self.actionOpen.setFont(font) self.actionOpen.setObjectName("actionOpen") self.actionPrint = QtWidgets.QAction(MainWindow) font = QtGui.QFont() font.setPointSize(14) self.actionPrint.setFont(font) self.actionPrint.setObjectName("actionPrint") self.actionClose = QtWidgets.QAction(MainWindow) font = QtGui.QFont() font.setPointSize(14) self.actionClose.setFont(font) self.actionClose.setObjectName("actionClose") self.actionDisplaySettings = QtWidgets.QAction(MainWindow) font = QtGui.QFont() font.setPointSize(14) self.actionDisplaySettings.setFont(font) self.actionDisplaySettings.setObjectName("actionDisplaySettings") self.actionScreenCapture = QtWidgets.QAction(MainWindow) font = QtGui.QFont() font.setPointSize(14) self.actionScreenCapture.setFont(font) self.actionScreenCapture.setObjectName("actionScreenCapture") self.menuFile.addAction(self.actionOpen) self.menuFile.addSeparator() self.menuFile.addAction(self.actionScreenCapture) self.menuFile.addAction(self.actionPrint) self.menuFile.addSeparator() self.menuFile.addAction(self.actionClose) self.menuEdit.addAction(self.actionDisplaySettings) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuEdit.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) MainWindow.setTabOrder(self.sessionNameLineEdit, self.subjectAgeSpinBox) MainWindow.setTabOrder(self.subjectAgeSpinBox, self.subjectSexComboBox) MainWindow.setTabOrder(self.subjectSexComboBox, self.sampleIntervalSpinBox) MainWindow.setTabOrder(self.sampleIntervalSpinBox, self.trialCountSpinBox) MainWindow.setTabOrder(self.trialCountSpinBox, self.itiSpinBox) MainWindow.setTabOrder(self.itiSpinBox, self.itiVarianceSpinBox) MainWindow.setTabOrder(self.itiVarianceSpinBox, self.trialDurationSpinBox) MainWindow.setTabOrder(self.trialDurationSpinBox, self.baselineDurationSpinBox) MainWindow.setTabOrder(self.baselineDurationSpinBox, self.csNameLineEdit) MainWindow.setTabOrder(self.csNameLineEdit, self.csDurationSpinBox) MainWindow.setTabOrder(self.csDurationSpinBox, self.interstimulusIntervalSpinBox) MainWindow.setTabOrder(self.interstimulusIntervalSpinBox, self.usNameLineEdit) MainWindow.setTabOrder(self.usNameLineEdit, self.usDurationSpinBox) MainWindow.setTabOrder(self.usDurationSpinBox, self.lockButton) MainWindow.setTabOrder(self.lockButton, self.playButton) #Set up the input manager import InputManager as im im.initialSetUp(self, icon1, icon) #Set up the graph import TheGraph as tg tg.initialSetUp(self) #Complete set up of the main window (this file) self.subjectSexComboBox.addItem("MALE") self.subjectSexComboBox.addItem("FEMALE")
def playButtonPressed(): setPlaying(not tg.isPlaying())