def __init__(self, viewer, snippets=None): self.model = None self.viewer = viewer QtWidgets.QWidget.__init__(self) self.layout = QtWidgets.QVBoxLayout(self) self.setLayout(self.layout) self.c = None self.tools = QtWidgets.QHBoxLayout(self) self.layout.addLayout(self.tools) self.runbutton = QtWidgets.QPushButton("Run") width = self.runbutton.fontMetrics().boundingRect("Run").width() + 20 self.runbutton.setMaximumWidth(width) self.tools.addWidget(self.runbutton) self.runbutton.clicked.connect(self.runCode) editor = CodeEdit() if has_pyqode: editor.backend.start(server.__file__) editor.panels.append(panels.FoldingPanel()) editor.panels.append(panels.LineNumberPanel()) editor.panels.append(panels.SearchAndReplacePanel(), panels.SearchAndReplacePanel.Position.BOTTOM) editor.panels.append(panels.EncodingPanel(), api.Panel.Position.TOP) editor.add_separator() editor.panels.append(pypanels.QuickDocPanel(), api.Panel.Position.BOTTOM) sh = editor.modes.append(PythonSH(editor.document())) editor.modes.append(modes.CaretLineHighlighterMode()) editor.modes.append(modes.CodeCompletionMode()) editor.modes.append(modes.ExtendedSelectionMode()) editor.modes.append(modes.FileWatcherMode()) editor.modes.append(modes.OccurrencesHighlighterMode()) editor.modes.append(modes.RightMarginMode()) editor.modes.append(modes.SmartBackSpaceMode()) editor.modes.append(modes.SymbolMatcherMode()) editor.modes.append(modes.ZoomMode()) editor.modes.append(pymodes.CommentsMode()) editor.modes.append(pymodes.CalltipsMode()) auto = pymodes.PyAutoCompleteMode() auto.logger.setLevel(logging.CRITICAL) editor.modes.append(auto) editor.modes.append(pymodes.PyAutoIndentMode()) editor.modes.append(pymodes.PyIndenterMode()) editor.show() else: editor.setStyleSheet("font-size: 10pt; font-family: Consolas, Courier;") self.editor = editor self.snippets = snippets if self.snippets: self.list = QtWidgets.QComboBox(self) self.replace_snippet(0) for snip_name in self.snippets.keys(): self.list.addItem(snip_name) self.tools.addWidget(self.list) self.list.currentIndexChanged[int].connect(self.replace_snippet) self.layout.addWidget(self.editor) self.output = QtWidgets.QTextEdit() self.output.setReadOnly(True) self.output.setStyleSheet("font-size: 10pt; font-family: Consolas, Courier; background-color: #444;") self.layout.addWidget(self.output)
def test_block_helper(): editor = CodeEdit() editor.file.open(__file__) block = editor.document().findBlockByNumber(0) assert block.userState() == -1 # # test user state # utils.TextBlockHelper.set_state(block, 0) assert block.userState() == 0 utils.TextBlockHelper.set_state(block, 26) assert utils.TextBlockHelper.get_state(block) == 26 # # test fold level # lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 0 utils.TextBlockHelper.set_fold_lvl(block, 5) lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 5 utils.TextBlockHelper.set_fold_lvl(block, 1024) lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 1023 # ensure other values are intact assert utils.TextBlockHelper.get_state(block) == 26 # # Test fold trigger # assert utils.TextBlockHelper.is_fold_trigger(block) is False utils.TextBlockHelper.set_fold_trigger(block, True) assert utils.TextBlockHelper.is_fold_trigger(block) is True utils.TextBlockHelper.set_fold_trigger(block, False) assert utils.TextBlockHelper.is_fold_trigger(block) is False utils.TextBlockHelper.set_fold_trigger(block, True) # ensure other values are intact assert utils.TextBlockHelper.get_fold_lvl(block) == 1023 assert utils.TextBlockHelper.get_state(block) == 26 # # Test fold trigger state # assert utils.TextBlockHelper.get_fold_trigger_state(block) is False utils.TextBlockHelper.set_fold_trigger_state(block, True) assert utils.TextBlockHelper.get_fold_trigger_state(block) is True utils.TextBlockHelper.set_fold_trigger_state(block, False) assert utils.TextBlockHelper.get_fold_trigger_state(block) is False # ensure other values are intact assert utils.TextBlockHelper.is_fold_trigger(block) is True assert utils.TextBlockHelper.get_fold_lvl(block) == 1023 assert utils.TextBlockHelper.get_state(block) == 26
def test_block_helper(): editor = CodeEdit() editor.file.open(__file__) block = editor.document().findBlockByNumber(0) assert block.userState() == -1 # # test user state # utils.TextBlockHelper.set_state(block, 0) assert block.userState() == 0 utils.TextBlockHelper.set_state(block, 26) assert utils.TextBlockHelper.get_state(block) == 26 # # test fold level # lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 0 utils.TextBlockHelper.set_fold_lvl(block, 5) lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 5 utils.TextBlockHelper.set_fold_lvl(block, 1024) lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 1023 # ensure other values are intact assert utils.TextBlockHelper.get_state(block) == 26 # # Test fold trigger # assert utils.TextBlockHelper.is_fold_trigger(block) is False utils.TextBlockHelper.set_fold_trigger(block, True) assert utils.TextBlockHelper.is_fold_trigger(block) is True utils.TextBlockHelper.set_fold_trigger(block, False) assert utils.TextBlockHelper.is_fold_trigger(block) is False utils.TextBlockHelper.set_fold_trigger(block, True) # ensure other values are intact assert utils.TextBlockHelper.get_fold_lvl(block) == 1023 assert utils.TextBlockHelper.get_state(block) == 26 # # Test fold trigger state # assert utils.TextBlockHelper.is_collapsed(block) is False utils.TextBlockHelper.set_collapsed(block, True) assert utils.TextBlockHelper.is_collapsed(block) is True utils.TextBlockHelper.set_collapsed(block, False) assert utils.TextBlockHelper.is_collapsed(block) is False # ensure other values are intact assert utils.TextBlockHelper.is_fold_trigger(block) is True assert utils.TextBlockHelper.get_fold_lvl(block) == 1023 assert utils.TextBlockHelper.get_state(block) == 26
""" Minimal example showing the use of the AutoCompleteMode. """ import logging logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit, ColorScheme from pyqode.core.backend import server from pyqode.core.modes import PygmentsSH if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) sh = editor.modes.append(PygmentsSH(editor.document())) sh.color_scheme = 'monokai' editor.file.open(__file__) editor.show() app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the AutoIndentMode. """ import logging logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit from pyqode.python.backend import server from pyqode.core.modes import SymbolMatcherMode from pyqode.python.modes import PyAutoIndentMode, PythonSH if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) # PyAutoIndent needs the matcher mode and a syntax highlighter to work # properly editor.modes.append(PythonSH(editor.document())) editor.modes.append(SymbolMatcherMode()) print(editor.modes.append(PyAutoIndentMode())) editor.show() editor.appendPlainText('class Foo:') app.exec_() editor.close() del editor del app
def __init__(self,viewer,snippets=None): self.model=None self.viewer = viewer QtGui.QWidget.__init__(self) self.layout= QtGui.QVBoxLayout(self) self.setLayout(self.layout) self.c = None self.tools = QtGui.QHBoxLayout(self) self.layout.addLayout(self.tools) self.runbutton = QtGui.QPushButton("Run") width = self.runbutton.fontMetrics().boundingRect("Run").width() + 20 self.runbutton.setMaximumWidth(width) self.tools.addWidget(self.runbutton) self.runbutton.clicked.connect(self.runCode) editor = CodeEdit() if has_pyqode: editor.backend.start(server.__file__) editor.panels.append(panels.FoldingPanel()) editor.panels.append(panels.LineNumberPanel()) editor.panels.append(panels.SearchAndReplacePanel(), panels.SearchAndReplacePanel.Position.BOTTOM) editor.panels.append(panels.EncodingPanel(), api.Panel.Position.TOP) editor.add_separator() editor.panels.append(pypanels.QuickDocPanel(), api.Panel.Position.BOTTOM) sh = editor.modes.append(PythonSH(editor.document())) editor.modes.append(modes.CaretLineHighlighterMode()) editor.modes.append(modes.CodeCompletionMode()) editor.modes.append(modes.ExtendedSelectionMode()) editor.modes.append(modes.FileWatcherMode()) editor.modes.append(modes.OccurrencesHighlighterMode()) editor.modes.append(modes.RightMarginMode()) editor.modes.append(modes.SmartBackSpaceMode()) editor.modes.append(modes.SymbolMatcherMode()) editor.modes.append(modes.ZoomMode()) editor.modes.append(pymodes.CommentsMode()) editor.modes.append(pymodes.CalltipsMode()) auto = pymodes.PyAutoCompleteMode() auto.logger.setLevel(logging.CRITICAL) editor.modes.append(auto) editor.modes.append(pymodes.PyAutoIndentMode()) editor.modes.append(pymodes.PyIndenterMode()) editor.show() else: editor.setStyleSheet('font-size: 10pt; font-family: Consolas, Courier;') self.editor = editor self.snippets = snippets if self.snippets: self.list = QtWidgets.QComboBox(self) self.replace_snippet(0) for snip_name in self.snippets.keys(): self.list.addItem(snip_name) self.tools.addWidget(self.list) QtCore.QObject.connect(self.list, QtCore.SIGNAL("currentIndexChanged(int)"), self.replace_snippet) self.layout.addWidget(self.editor) self.output = QtGui.QTextEdit() self.output.setReadOnly(True) self.output.setStyleSheet('font-size: 10pt; font-family: Consolas, Courier; background-color: #444;') self.layout.addWidget(self.output)
""" Minimal example showing the use of the CommentsMode. """ import logging logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit from pyqode.python.backend import server from pyqode.python.modes import CommentsMode, PythonSH if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(CommentsMode())) editor.modes.append(PythonSH(editor.document())) # looks better editor.show() editor.appendPlainText( '''# press Ctrl+/ to comment/uncomment selected text or the current line class Foo: def bar(self): pass''') app.exec_() editor.close() del editor del app
Minimal example showing the use of the FrostedCheckerMode. We use Frosted (a fork of pyFlakes) that provides an easier API for running pyFlakes on strings (instead of files). """ import logging from pyqode.core.panels import CheckerPanel logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit from pyqode.python.backend import server from pyqode.python.modes import PyFlakesChecker, PythonSH if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(PyFlakesChecker())) editor.modes.append(PythonSH(editor.document())) # looks better editor.panels.append(CheckerPanel()) editor.show() editor.setPlainText('print("foo\n', 'text/x-python', 'utf-8') app.exec_() editor.close() del editor del app
Minimal example showing the use of the AutoIndentMode. """ import logging logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit from pyqode.python.backend import server from pyqode.core.modes import SymbolMatcherMode from pyqode.python.modes import PyAutoIndentMode, PythonSH if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) # PyAutoIndent needs the matcher mode and a syntax highlighter to work # properly editor.modes.append(PythonSH(editor.document())) editor.modes.append(SymbolMatcherMode()) print(editor.modes.append(PyAutoIndentMode())) editor.show() editor.appendPlainText( 'class Foo:') app.exec_() editor.close() del editor del app
This example will show you that the caret line color is automatically set by the syntax highlighter mode. See how the color is different from the color obtained in ``caret_line_highligter.py`` """ import logging logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit from pyqode.core.backend import server from pyqode.core.modes import CaretLineHighlighterMode from pyqode.core.modes import PygmentsSyntaxHighlighter if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(CaretLineHighlighterMode())) print(editor.modes.append(PygmentsSyntaxHighlighter(editor.document()))) editor.show() editor.appendPlainText('\n' * 10) app.exec_() editor.close() del editor del app
This panel works in combination with the DocumentAnalyserMode. """ import logging logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import code_edit from pyqode.core.api import CodeEdit from pyqode.python.backend import server from pyqode.python.modes import DocumentAnalyserMode from pyqode.python.panels import SymbolBrowserPanel if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) # we must add the document analyser prior to adding the symbol browser # panel editor.modes.append(DocumentAnalyserMode(editor.document())) editor.panels.append(SymbolBrowserPanel(), SymbolBrowserPanel.Position.TOP) editor.show() editor.file.open(code_edit.__file__) app.exec_() editor.close() del editor del app
See how the color is different from the color obtained in ``caret_line_highligter.py`` """ import logging logging.basicConfig(level=logging.DEBUG) import sys import os os.environ['QT_API'] = 'pyside2' # os.environ['QT_API'] = 'pyqt5' from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit from pyqode.core.backend import server from pyqode.core.modes import CaretLineHighlighterMode from pyqode.core.modes import PygmentsSyntaxHighlighter if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(CaretLineHighlighterMode())) print(editor.modes.append(PygmentsSyntaxHighlighter(editor.document()))) editor.show() editor.appendPlainText('\n' * 10) app.exec_() editor.close() del editor del app