Thanks guys, Pointed me in the right direction. Here is what I came up with: QPushButton - singleBlock - Set Checkable Cycle Start = Obvious btn usage STEP FROM LINE - Start the program from a specified line number in STEP MODE if . Cycle Start runs each block one at a time from the specified block. Sub Calls and M calls obviously do not step as LCNC from what I see limits you there. :( Uses the same def call but if's the SB button status. RUN FROM LINE - Run the program normally from the specified line. Run from here button (UI) work around (see other post) waits for operator to press the button and then execution starts. Cycle Start checks status of SB button and then sets program.step or program.run based on it's status. Works great. No bugs so far. # ------------------------------------------------------------------------- # BEGIN RUN/STEP FROM HERE SETUP # ------------------------------------------------------------------------- ### If Single Block is active(Checked) then the program will start from ### the line specified in the lineNumber VCPLineEdit in STEP mode. ### NOTE *****The cycle start button works is used for STEP ### WARNING *****If NOT STEP run_from_here WILL EXECUTE Program when pressed only ### RECOMMENDED *****Never executing full run inside a py program call. ### ELSE it will set the run_from_here normal and wait for operator ### to press the button in the UI def setStartingLineLabel(self): sb = self.singleBlock.isChecked() if sb: print('Single Block Value: ' + str(sb)) # Set variable to the VCPLineEdit Text Value line_number = self.lineNumber.text() # Set StatusLabel to alert where the program will start self.run_from_here.setText('RUN FROM LINE ' + line_number) # Set the actionName property of the Run From Line Btn self.run_from_here.setProperty('actionName', 'program.run:' + line_number) # Update the run_from_here checked status to notify when ready self.run_from_here.setChecked(True) # OPTIONAL - Play a sound to alert when ready playsound('/home/don/Downloads/bvmtnf_ui-21.wav') # Cause the click event for the 'run_from_here' btn self.run_from_here.click() # Set Feed Hold pause() # Clear Out the VCPLineEdit for lineNumber self.lineNumber.setText('') else: # Set variable to the VCPLineEdit Text Value line_number = self.lineNumber.text() # Set StatusLabel to alert where the program will start self.run_from_here.setText('RUN FROM LINE ' + line_number) # Set the actionName property of the Run From Line Btn self.run_from_here.setProperty('actionName', 'program.run:' + line_number) # Update the run_from_here checked status to notify when ready self.run_from_here.setChecked(True) # OPTIONAL - Play a sound to alert when ready playsound('/home/don/Downloads/bvmtnf_ui-21.wav') # Clear Out the VCPLineEdit for lineNumber self.lineNumber.setText('') def clearStartLineLabel(self): # Clear out text set by prior call self.run_from_here.setText('RUN FROM LINE') # UnCHeck the btn self.run_from_here.setChecked(False) # ------------------------------------------------------------------------- # END RUN/STEP FROM HERE SETUP # ------------------------------------------------------------------------- # ------------------------------------------------------------------------- # BEGIN CYCLE START FUNCTION # ------------------------------------------------------------------------- ### Works for normal run actions outside run from here def CycleStart(self): # Check Single Block Status sb = self.singleBlock.isChecked() if sb: # Start program in STEP step() else: # Start program in full run mode run() # ------------------------------------------------------------------------- # END CYCLE START FUNCTION # ------------------------------------------------------------------------- Init Connections: ### Setup connection to VCPLineEdit self.lineNumber.returnPressed.connect(self.setStartingLineLabel) ### Connect run_from_here Btn to clear label after start self.run_from_here.clicked.connect(self.clearStartLineLabel)