def write(self, s, tags=()): self.text.mark_gravity("iomark", "right") OutputWindow.write(self, s, tags, "iomark") self.text.mark_gravity("iomark", "left") if self.canceled: self.canceled = 0 raise KeyboardInterrupt
def __init__(self, flist=None): self.interp = ModifiedInterpreter(self) if flist is None: root = Tk() fixwordbreaks(root) root.withdraw() flist = PyShellFileList(root) OutputWindow.__init__(self, flist, None, None) import __builtin__ __builtin__.quit = __builtin__.exit = "To exit, type Ctrl-D." self.auto = self.extensions["AutoIndent"] # Required extension self.auto.config(prefertabs=1) text = self.text text.configure(wrap="char") text.bind("<<newline-and-indent>>", self.enter_callback) text.bind("<<plain-newline-and-indent>>", self.linefeed_callback) text.bind("<<interrupt-execution>>", self.cancel_callback) text.bind("<<beginning-of-line>>", self.home_callback) text.bind("<<end-of-file>>", self.eof_callback) text.bind("<<open-stack-viewer>>", self.open_stack_viewer) text.bind("<<toggle-debugger>>", self.toggle_debugger) text.bind("<<open-python-shell>>", self.flist.open_shell) text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer) sys.stdout = PseudoFile(self, "stdout") sys.stderr = PseudoFile(self, "stderr") sys.stdin = self self.console = PseudoFile(self, "console") self.history = self.History(self.text)
def write(self, s, tags=()): try: self.text.mark_gravity("iomark", "right") OutputWindow.write(self, s, tags, "iomark") self.text.mark_gravity("iomark", "left") except: pass if self.canceled: self.canceled = 0 if not use_subprocess: raise KeyboardInterrupt
def _close(self): self.close_debugger() # Restore std streams sys.stdout = self.save_stdout sys.stderr = self.save_stderr sys.stdin = self.save_stdin # Break cycles self.interp = None self.console = None self.flist.pyshell = None self.history = None OutputWindow._close(self) # Really EditorWindow._close
def _close(self): self.close_debugger() # Restore std streams sys.stdout = self.save_stdout sys.stderr = self.save_stderr sys.stdin = self.save_stdin # Break cycles self.interp = None self.console = None self.auto = None self.flist.pyshell = None self.history = None OutputWindow._close(self) # Really EditorWindow._close
def __init__(self, flist=None): if use_subprocess: ms = self.menu_specs if ms[2][0] != "shell": ms.insert(2, ("shell", "_Shell")) self.interp = ModifiedInterpreter(self) if flist is None: root = Tk() fixwordbreaks(root) root.withdraw() flist = PyShellFileList(root) # OutputWindow.__init__(self, flist, None, None) # import __builtin__ __builtin__.quit = __builtin__.exit = "To exit, type Ctrl-D." # self.config(usetabs=1, indentwidth=8, context_use_ps1=1) # text = self.text text.configure(wrap="char") text.bind("<<newline-and-indent>>", self.enter_callback) text.bind("<<plain-newline-and-indent>>", self.linefeed_callback) text.bind("<<interrupt-execution>>", self.cancel_callback) text.bind("<<beginning-of-line>>", self.home_callback) text.bind("<<end-of-file>>", self.eof_callback) text.bind("<<open-stack-viewer>>", self.open_stack_viewer) text.bind("<<toggle-debugger>>", self.toggle_debugger) text.bind("<<open-python-shell>>", self.flist.open_shell) text.bind("<<toggle-jit-stack-viewer>>", self.toggle_jit_stack_viewer) if use_subprocess: text.bind("<<view-restart>>", self.view_restart_mark) text.bind("<<restart-shell>>", self.restart_shell) # self.save_stdout = sys.stdout self.save_stderr = sys.stderr self.save_stdin = sys.stdin import IOBinding self.stdout = PseudoFile(self, "stdout", IOBinding.encoding) self.stderr = PseudoFile(self, "stderr", IOBinding.encoding) self.console = PseudoFile(self, "console", IOBinding.encoding) if not use_subprocess: sys.stdout = self.stdout sys.stderr = self.stderr sys.stdin = self # self.history = self.History(self.text) # self.pollinterval = 50 # millisec if use_subprocess: self.interp.start_subprocess()
def setup(self): self.owin = owin = OutputWindow(self.flist) text = owin.text for tag, cnf in self.tagdefs.items(): if cnf: apply(text.tag_configure, (tag, ), cnf) text.tag_raise('sel') self.write = self.owin.write
def close(self): # Extend base class method if self.executing: # XXX Need to ask a question here if not tkMessageBox.askokcancel( "Kill?", "The program is still running; do you want to kill it?", default="ok", master=self.text): return "cancel" self.canceled = 1 if self.reading: self.top.quit() return "cancel" return OutputWindow.close(self)
def default_command(self, event=None): prog = self.engine.getprog() if not prog: return path = self.globvar.get() if not path: self.top.bell() return from OutputWindow import OutputWindow save = sys.stdout try: sys.stdout = OutputWindow(self.flist) self.grep_it(prog, path) finally: sys.stdout = save
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.item0 = BytesIO() self.mdi = QMdiArea() self.setCentralWidget(self.mdi) bar = self.menuBar() file = bar.addMenu("File") file.addAction("New") file.addAction("cascade") file.addAction("Tiled") file.triggered[QAction].connect(self.windowaction) self.setWindowTitle("Camphor") MainWindow.count += 1 self.output_window = OutputWindow() self.mdi.addSubWindow(self.output_window) MainWindow.count += 1 self.script_window = ScriptWindow() self.mdi.addSubWindow(self.script_window) MainWindow.count += 1 self.viewer_window = ViewerWindow() self.mdi.addSubWindow(self.viewer_window) # QProcess object for external app self.process = QProcess(self) self.process.readyReadStandardOutput.connect( lambda: self.dataReady("std")) self.process.readyReadStandardError.connect( lambda: self.dataReady("error")) self.process.finished.connect(lambda: self.update_svg()) #Connect Slots self.script_window.button_exec.clicked.connect( lambda: self.run_script()) self.script_window.button_read.clicked.connect(lambda: self.read_svg()) #self.viewer_window.button_save.clicked.connect(lambda: self.save_svg()) #Assign Shortcuts self.shortcut_update = QShortcut(QKeySequence("Ctrl+R"), self) self.shortcut_update.activated.connect(lambda: self.run_script()) self.shortcut_update = QShortcut(QKeySequence("Ctrl+O"), self) self.shortcut_update.activated.connect(lambda: self.read_svg()) self.shortcut_update = QShortcut(QKeySequence("Ctrl+S"), self) self.shortcut_update.activated.connect(lambda: self.save_svg())
import string
#! /usr/bin/env python
class CamApp(SolidApp): def __init__(self): self.cam_dir = cam_dir self.program = None SolidApp.__init__(self) def GetAppTitle(self): return 'Heeks2 ( Computer Aided Manufacturing )' def GetAppConfigName(self): return 'Heeks2' def RegisterObjectTypes(self): SolidApp.RegisterObjectTypes(self) Program.type = cad.RegisterObjectType("Program", CreateProgram) Tools.type = cad.RegisterObjectType("Tools", CreateTools) Tool.type = cad.RegisterObjectType("Tool", CreateTool) Operations.type = cad.RegisterObjectType("Operations", CreateOperations) Pattern.type = cad.RegisterObjectType("Pattern", CreatePattern) Patterns.type = cad.RegisterObjectType("Patterns", CreatePatterns) Surface.type = cad.RegisterObjectType("Surface", CreateSurface) Surfaces.type = cad.RegisterObjectType("Surfaces", CreateSurfaces) Stock.type = cad.RegisterObjectType("Stock", CreateStock) Stocks.type = cad.RegisterObjectType("Stocks", CreateStocks) NcCode.type = cad.RegisterObjectType("nccode", CreateNcCode) cam.SetNcCodeBlockType(cad.RegisterObjectType("ncblock", CreateNcCodeBlock)) Profile.type = cad.RegisterObjectType("Profile", CreateProfile) Pocket.type = cad.RegisterObjectType("Pocket", CreatePocket) Drilling.type = cad.RegisterObjectType("Drilling", CreateDrilling) Tags.type = cad.RegisterObjectType("Tags", CreateTags) Tag.type = cad.RegisterObjectType("Tag", CreateTag) ScriptOp.type = cad.RegisterObjectType("ScriptOp", CreateScriptOp) ReadNCCodeColorsFromConfig() def AddProgramIfThereIsntOne(self): # check if there is already a program in the document doc = cad.GetApp() object = doc.GetFirstChild() while object != None: if object.GetType() == Program.type: self.program = object return object = doc.GetNextChild() # add a program self.program = Program.Program() programs.append(self.program) self.program.add_initial_children() cad.AddUndoably(self.program) def OnNewOrOpen(self, open): SolidApp.OnNewOrOpen(self, open) self.AddProgramIfThereIsntOne() # link the output window to program's nc code obect self.output_window.SetNcCodeObject(self.program.nccode.nc_code) # if open == False: # self.frame.OnOpenFilepath('c:/users/dan heeks/downloads/two points.heeks', False) def SetTool(self, tool_number): tool = Tool.FindTool(tool_number) if tool != None: if self.tool_number != tool_number: tool_change( id = tool_number) if self.attached_to_surface: import nc.nc nc.nc.creator.set_ocl_cutter(tool.OCLDefinition(self.attached_to_surface)) self.tool_number = tool_number def AddTags(self, object): Profile.tag_drawing.profile = object self.SetInputMode(Profile.tag_drawing) def RepositionTag(self, object): pos = self.PickPosition('Pick New Tag Position') object.pos.x = pos.x object.pos.y = pos.y cad.Repaint() def ClearUnusedTools(self, program): to_delete = [] used_set = {} for op in program.operations.GetChildren(): used_set[op.tool_number] = True for tool in program.tools.GetChildren(): if tool.tool_number not in used_set: to_delete.append(tool) if len(to_delete)>0: cad.DeleteObjectsUndoably(to_delete) def ClearToolpath(self): cad.StartHistory('Clear Toolpath') blank_nc = NcCode.NcCode() cad.PyIncref(blank_nc) wx.GetApp().CopyUndoablyWithChildren(wx.GetApp().program.nccode, blank_nc) self.EndHistory() def GetObjectTools(self, object, control_pressed, from_tree_canvas = False): tools = SolidApp.GetObjectTools(self, object, control_pressed, from_tree_canvas) if object.GetType() == Profile.type: tools.append(CamContextTool.CamObjectContextTool(object, "Add Tags", "addtag", self.AddTags)) if object.GetType() == Tag.type: tools.append(CamContextTool.CamObjectContextTool(object, "Pick new position", "tagpos", self.RepositionTag)) if object.GetType() == Program.type or object.GetType() == Tools.type: tools.append(CamContextTool.CamObjectContextTool(self.program, "Clear Unused Tools", "optoolclear", self.ClearUnusedTools)) if object.GetType() == NcCode.type: tools.append(CamContextTool.CamContextTool("Clear Toolpath", "toolpathclear", self.ClearToolpath)) return tools def AddExtraRibbonPages(self, ribbon): SolidApp.AddExtraRibbonPages(self, ribbon) save_bitmap_path = self.bitmap_path self.bitmap_path = cam_dir + '/bitmaps' page = RB.RibbonPage(ribbon, wx.ID_ANY, 'Machining', ribbon.Image('ops')) page.Bind(wx.EVT_KEY_DOWN, ribbon.OnKeyDown) panel = RB.RibbonPanel(page, wx.ID_ANY, 'Milling', ribbon.Image('ops')) toolbar = RB.RibbonButtonBar(panel) Ribbon.AddToolBarTool(toolbar, 'Profile', 'opprofile', 'Add a Profile Operation', self.NewProfileOp) Ribbon.AddToolBarTool(toolbar, 'Pocket', 'pocket', 'Add a Pocket Operation', self.NewPocketOp) Ribbon.AddToolBarTool(toolbar, 'Drilling', 'drilling', 'Add a Drilling Operation', self.NewDrillingOp) panel = RB.RibbonPanel(page, wx.ID_ANY, 'Other Operations', ribbon.Image('ops')) toolbar = RB.RibbonButtonBar(panel) Ribbon.AddToolBarTool(toolbar, 'Script', 'scriptop', 'Add a Script Operation', self.NewScriptOp) Ribbon.AddToolBarTool(toolbar, 'Pattern', 'pattern', 'Add a Pattern', self.NewPattern) Ribbon.AddToolBarTool(toolbar, 'Surface', 'surface', 'Add a Surface', self.NewSurface) Ribbon.AddToolBarTool(toolbar, 'Stock', 'stock', 'Add a Stock', self.NewStock) panel = RB.RibbonPanel(page, wx.ID_ANY, 'Tools', ribbon.Image('tools')) toolbar = RB.RibbonButtonBar(panel) Ribbon.AddToolBarTool(toolbar, 'Drill', 'drill', 'Add a Drill', self.NewDrill) Ribbon.AddToolBarTool(toolbar, 'Centre Drill', 'centredrill', 'Add a Centre Drill', self.NewCentreDrill) Ribbon.AddToolBarTool(toolbar, 'End Mill', 'endmill', 'Add an End Mill', self.NewEndMill) Ribbon.AddToolBarTool(toolbar, 'Slot Drill', 'slotdrill', 'Add a Slot Drill', self.NewSlotDrill) Ribbon.AddToolBarTool(toolbar, 'Ball End Mill', 'ballmill', 'Add a Ball Mill', self.NewBallMill) Ribbon.AddToolBarTool(toolbar, 'Chamfer Mill', 'chamfmill', 'Add a Chamfer Mill', self.NewChamferMill) panel = RB.RibbonPanel(page, wx.ID_ANY, 'G-Code', ribbon.Image('code')) toolbar = RB.RibbonButtonBar(panel) Ribbon.AddToolBarTool(toolbar, 'Auto Program', 'magic', 'Create Program Automatically', self.OnAutoProgram) Ribbon.AddToolBarTool(toolbar, 'Create G-Code', 'postprocess', 'Create G-Code Output File', self.OnCreateGCode) Ribbon.AddToolBarTool(toolbar, 'Setup Sheet', 'pdf', 'Create PDF Setup Sheet', self.OnSetupSheet) Ribbon.AddToolBarTool(toolbar, 'Open G-Code', 'opennc', 'Open a G-Code File ( to display its tool path )', self.OnOpenGCodeFile) page.Realize() self.bitmap_path = save_bitmap_path def AddExtraWindows(self, frame): self.output_window = OutputWindow(frame) frame.aui_manager.AddPane(self.output_window, wx.aui.AuiPaneInfo().Name('Output').Caption('Output').Left().Bottom().BestSize(wx.Size(600, 200))) self.RegisterHideableWindow(self.output_window, self.cam_dir + '/bitmaps') def GetSelectedSketches(self): sketches = [] for object in cad.GetSelectedObjects(): if object.GetIDGroupType() == cad.OBJECT_TYPE_SKETCH: sketches.append(object.GetID()) return sketches def GetSelectedPoints(self): points = [] for object in cad.GetSelectedObjects(): if object.GetIDGroupType() == cad.OBJECT_TYPE_POINT: points.append(object.GetID()) return points def EditAndAddSketchOp(self, new_object, sketches): if new_object.Edit(): cad.StartHistory('Add ' + new_object.GetTitle()) cad.AddUndoably(new_object, self.program.operations, None) first = True for sketch in sketches: if first: first = False else: copy = new_object.MakeACopy() copy.sketch = sketch cad.AddUndoably(copy, self.program.operations, None) self.EndHistory() def NewProfileOp(self, e): sketches = self.GetSelectedSketches() sketch = 0 if len(sketches) > 0: sketch = sketches[0] new_object = Profile.Profile(sketch) new_object.ReadDefaultValues() new_object.SetID(cad.GetNextID(Profile.type)) new_object.AddMissingChildren() # add the tags container self.EditAndAddSketchOp(new_object, sketches) def NewPocketOp(self, e): sketches = self.GetSelectedSketches() sketch = 0 if len(sketches) > 0: sketch = sketches[0] new_object = Pocket.Pocket(sketch) new_object.ReadDefaultValues() new_object.SetID(cad.GetNextID(Pocket.type)) self.EditAndAddSketchOp(new_object, sketches) def NewStock(self, e): solids = [] for object in cad.GetSelectedObjects(): if object.GetIDGroupType() == cad.OBJECT_TYPE_STL_SOLID: solids.append(object.GetID()) new_object = Stock.Stock() new_object.solids += solids new_object.SetID(cad.GetNextID(Stock.type)) if new_object.Edit(): cad.AddUndoably(new_object, self.program.stocks, None) self.EndHistory() def EditAndAddOp(self, op): if op.Edit(): cad.StartHistory('Add ' + op.GetTitle()) cad.AddUndoably(op, op.PreferredPasteTarget(), None) self.EndHistory() def NewDrillingOp(self, e): new_object = Drilling.Drilling() new_object.ReadDefaultValues() new_object.points += self.GetSelectedPoints() new_object.SetID(cad.GetNextID(Drilling.type)) self.EditAndAddOp(new_object) def NewScriptOp(self, e): new_object = ScriptOp.ScriptOp() new_object.SetID(cad.GetNextID(ScriptOp.type)) self.EditAndAddOp(new_object) def NewPattern(self, e): new_object = Pattern.Pattern() new_object.SetID(cad.GetNextID(Pattern.type)) self.EditAndAddOp(new_object) def NewSurface(self, e): new_object = Surface.Surface() new_object.ReadDefaultValues() new_object.SetID(cad.GetNextID(Surface.type)) self.EditAndAddOp(new_object) def EditAndAddTool(self, tool): if tool.Edit(): cad.StartHistory('Add Tool') cad.AddUndoably(tool, self.program.tools, None) self.EndHistory() def AddNewTool(self, tool_type): # find next available tool number max_tool_number = 0 for object in self.program.tools.GetChildren(): if object.tool_number > max_tool_number: max_tool_number = object.tool_number # Add a new tool new_object = Tool.Tool(tool_number = max_tool_number + 1, type = tool_type) self.EditAndAddTool(new_object) def NewDrill(self, e): self.AddNewTool(Tool.TOOL_TYPE_DRILL) def NewCentreDrill(self, e): self.AddNewTool(Tool.TOOL_TYPE_CENTREDRILL) def NewEndMill(self, e): self.AddNewTool(Tool.TOOL_TYPE_ENDMILL) def NewSlotDrill(self, e): self.AddNewTool(Tool.TOOL_TYPE_SLOTCUTTER) def NewBallMill(self, e): self.AddNewTool(Tool.TOOL_TYPE_BALLENDMILL) def NewChamferMill(self, e): self.AddNewTool(Tool.TOOL_TYPE_CHAMFER) def OnAutoProgram(self, event): if not os.path.isfile('AutoProgram.py'): wx.MessageBox('This is a commercial feature. Download it from here. ( website URL to do... )') return from AutoProgram import AutoProgram a = AutoProgram() if a.Edit(): a.Run() def OnCreateGCode(self, e): try: self.program.MakeGCode() self.program.BackPlot() except Exception as e: import traceback print(traceback.format_exc()) wx.MessageBox('error during Create G-Code: ' + str(e)) def OnSetupSheet(self, e): temporary_filepath = str((wx.StandardPaths.Get().GetTempDir() + "/setup_sheet.pdf").replace('\\', '/')) self.program.MakeSetupSheet(temporary_filepath) import webbrowser webbrowser.open_new(temporary_filepath) def OnOpenGCodeFile(self, e): import wx dialog = wx.FileDialog(self.frame, "Open G-Code file", wildcard = "G-Code files" + " |*.*") dialog.CentreOnParent() if dialog.ShowModal() == wx.ID_OK: self.program.output_file_name_follows_data_file_name = False self.program.output_file = dialog.GetPath() self.program.BackPlot() def OnViewOutput(self, e): pane_info = self.aui_manager.GetPane(self.output_window) if pane_info.IsOk(): pane_info.Show(e.IsChecked()) self.aui_manager.Update() def OnUpdateViewOutput(self, e): e.Check(self.aui_manager.GetPane(self.output_window).IsShown()) def OnLeftClick(self, event): if not event.controlDown: # check for nc code block clicked if self.select_mode.filter.IsTypeInFilter(cam.GetNcCodeBlockType()): mask = cad.Filter() mask.AddType(cam.GetNcCodeBlockType()) objects = cad.ObjectsUnderWindow(cad.IRect(self.select_mode.button_down_point.x, self.select_mode.button_down_point.y), False, True, mask, False) if len(objects): block = objects[0] cad.ClearSelection() cad.Select(block) block.__class__ = cam.NcCodeBlock self.output_window.viewport.SelectLine(block.line_number, True) wx.GetApp().frame.graphics_canvas.Refresh() self.output_window.Refresh() return program = wx.GetApp().program if program != None: nccode = program.nccode if nccode != None: nccode.nc_code.SetHighlightedBlock(None) # do the default click behaviour SolidApp.OnLeftClick(self, event)
def AddExtraWindows(self, frame): self.output_window = OutputWindow(frame) frame.aui_manager.AddPane(self.output_window, wx.aui.AuiPaneInfo().Name('Output').Caption('Output').Left().Bottom().BestSize(wx.Size(600, 200))) self.RegisterHideableWindow(self.output_window, self.cam_dir + '/bitmaps')
def mywrite(self, s, tags=()): """ while the iomark isn't changed by other functions, write in two regions: if tags == 'console', it will be written at the end, on the iomark. otherwise, it will be written before that, at the consolemark, and be \\r treated. If some console text was written, a newline will be added before the consolemark, unless a newline is already there. """ # I'm not sure what the try and except exactly mean, but I copied them # from the original PyShell.write. try: # Remove escape codes s = self.escapeCodes.sub("", s) # Make it possible to write at the iomark self.text.mark_gravity("iomark", "right") # If position was changed, reset my data if self.text.index("iomark") != self.lastiomark: self.lllength = 0 self.llinsert = 0 self.addedNewline = False self.addNewline = False self.wasConsole = False self.text.mark_set("consolemark", "iomark") self.text.mark_gravity("consolemark", "left") # Remove the added newline, if there is one if self.addedNewline: self.basetext.delete("consolemark-1c", "consolemark") self.addedNewline = False # Write s if tags == "console": OutputWindow.write(self.editwin, s, tags, "iomark") if s: if not self.wasConsole and s[0] != '\n': self.addNewline = True self.wasConsole = True else: self.text.mark_gravity("consolemark", "right") lines = s.split('\n') for i in range(len(lines)): line = lines[i] segments = line.split('\r') if i == 0: insertindex = self.text.index("consolemark-%dc" % (self.lllength - self.llinsert)) self.basetext.delete(insertindex, insertindex + ("+%dc" % min( len(segments[0]), self.lllength-self.llinsert))) self.basetext.insert(insertindex, segments[0], tags) Links.parse(self.basetext, insertindex, \ '%s+%dc' % (insertindex, len(segments[0]))) self.llinsert = self.llinsert + len(segments[0]) self.lllength = max(self.lllength, self.llinsert) if len(segments) > 1: nexts = _combine_strings(segments[1:]) insertindex = self.text.index("consolemark-%dc" % self.lllength) self.basetext.delete(insertindex, insertindex + ("+%dc" % min(len(nexts), self.lllength))) self.basetext.insert(insertindex, nexts, tags) Links.parse(self.basetext, insertindex, \ '%s+%dc' % (insertindex, len(nexts))) self.lllength = max(len(nexts), self.lllength) self.llinsert = len(segments[-1]) else: # Line which is not the first nexts = _combine_strings(segments) insertindex = self.basetext.index("consolemark") self.basetext.insert("consolemark", '\n'+nexts, tags) Links.parse(self.basetext, insertindex, \ '%s+%dc' % (insertindex, 1 + len(nexts))) self.lllength = len(nexts) self.llinsert = len(segments[-1]) self.text.mark_gravity("consolemark", "left") # Add a newline, if needed: if self.addNewline and self.lllength != 0: self.text.mark_gravity("consolemark", "right") self.basetext.insert("consolemark", "\n") self.text.mark_gravity("consolemark", "left") self.addedNewline = True # Remember current iomark position self.lastiomark = self.text.index("iomark") # Make it impossible to write at the iomark self.text.mark_gravity("iomark", "left") # Show what we've done self.text.see("insert") self.text.update() except: pass # Another part taken from the original PyShell.write if self.editwin.canceled: self.editwin.canceled = 0 if not self.use_subprocess: raise KeyboardInterrupt
def mywrite(self, s, tags=()): """ while the iomark isn't changed by other functions, write in two regions: if tags == 'console', it will be written at the end, on the iomark. otherwise, it will be written before that, at the consolemark, and be \\r treated. If some console text was written, a newline will be added before the consolemark, unless a newline is already there. """ # I'm not sure what the try and except exactly mean, but I copied them # from the original PyShell.write. try: # Remove escape codes s = self.escapeCodes.sub("", s) # Make it possible to write at the iomark self.text.mark_gravity("iomark", "right") # If position was changed, reset my data if self.text.index("iomark") != self.lastiomark: self.lllength = 0 self.llinsert = 0 self.addedNewline = False self.addNewline = False self.wasConsole = False self.text.mark_set("consolemark", "iomark") self.text.mark_gravity("consolemark", "left") # Remove the added newline, if there is one if self.addedNewline: self.basetext.delete("consolemark-1c", "consolemark") self.addedNewline = False # Write s if tags == "console": OutputWindow.write(self.editwin, s, tags, "iomark") if s: if not self.wasConsole and s[0] != '\n': self.addNewline = True self.wasConsole = True else: self.text.mark_gravity("consolemark", "right") lines = s.split('\n') for i in range(len(lines)): line = lines[i] segments = line.split('\r') if i == 0: insertindex = self.text.index( "consolemark-%dc" % (self.lllength - self.llinsert)) self.basetext.delete( insertindex, insertindex + ("+%dc" % min(len(segments[0]), self.lllength - self.llinsert))) self.basetext.insert(insertindex, segments[0], tags) Links.parse(self.basetext, insertindex, \ '%s+%dc' % (insertindex, len(segments[0]))) self.llinsert = self.llinsert + len(segments[0]) self.lllength = max(self.lllength, self.llinsert) if len(segments) > 1: nexts = _combine_strings(segments[1:]) insertindex = self.text.index("consolemark-%dc" % self.lllength) self.basetext.delete( insertindex, insertindex + ("+%dc" % min(len(nexts), self.lllength))) self.basetext.insert(insertindex, nexts, tags) Links.parse(self.basetext, insertindex, \ '%s+%dc' % (insertindex, len(nexts))) self.lllength = max(len(nexts), self.lllength) self.llinsert = len(segments[-1]) else: # Line which is not the first nexts = _combine_strings(segments) insertindex = self.basetext.index("consolemark") self.basetext.insert("consolemark", '\n' + nexts, tags) Links.parse(self.basetext, insertindex, \ '%s+%dc' % (insertindex, 1 + len(nexts))) self.lllength = len(nexts) self.llinsert = len(segments[-1]) self.text.mark_gravity("consolemark", "left") # Add a newline, if needed: if self.addNewline and self.lllength != 0: self.text.mark_gravity("consolemark", "right") self.basetext.insert("consolemark", "\n") self.text.mark_gravity("consolemark", "left") self.addedNewline = True # Remember current iomark position self.lastiomark = self.text.index("iomark") # Make it impossible to write at the iomark self.text.mark_gravity("iomark", "left") # Show what we've done self.text.see("insert") self.text.update() except: pass # Another part taken from the original PyShell.write if self.editwin.canceled: self.editwin.canceled = 0 if not self.use_subprocess: raise KeyboardInterrupt
def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.item0 = BytesIO() self.mdi = QMdiArea() self.setCentralWidget(self.mdi) bar = self.menuBar() file = bar.addMenu("File") file.addAction("New") file.addAction("cascade") file.addAction("Tiled") file.triggered[QAction].connect(self.windowaction) self.setWindowTitle("Camphor") MainWindow.count += 1 self.output_window = OutputWindow() self.mdi.addSubWindow(self.output_window) MainWindow.count += 1 self.script_window = ScriptWindow() self.mdi.addSubWindow(self.script_window) MainWindow.count += 1 self.viewer_window = ViewerWindow() self.mdi.addSubWindow(self.viewer_window) #MainWindow.count += 1 #self.spread_sheet = SpreadSheetWidget() #self.mdi.addSubWindow(self.spread_sheet) headers = ["000", "001", "002"] tableData0 = [['abc', 100, 200], ['fff', 130, 260], ['jjj', 190, 300], ['ppp', 700, 500], ['yyy', 800, 900]] #model = MyTableModel(tableData0, headers) table_df = pd.DataFrame(tableData0, columns=headers) MainWindow.count += 1 self.dataframe_viewer = DataFrameViewer(table_df) self.mdi.addSubWindow(self.dataframe_viewer) # QProcess object for external app self.process = QProcess(self) self.process.readyReadStandardOutput.connect( lambda: self.dataReady("std")) self.process.readyReadStandardError.connect( lambda: self.dataReady("error")) self.process.finished.connect(lambda: self.update_svg()) #Connect Slots self.script_window.button_exec.clicked.connect( lambda: self.run_script()) self.script_window.button_read.clicked.connect(lambda: self.read_svg()) #self.viewer_window.button_save.clicked.connect(lambda: self.save_svg()) #Assign Shortcuts self.shortcut_update = QShortcut(QKeySequence("Ctrl+R"), self) self.shortcut_update.activated.connect(lambda: self.run_script()) self.shortcut_update = QShortcut(QKeySequence("Ctrl+O"), self) self.shortcut_update.activated.connect(lambda: self.read_svg()) self.shortcut_update = QShortcut(QKeySequence("Ctrl+S"), self) self.shortcut_update.activated.connect(lambda: self.save_svg())