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
def test_delay_job_runner(): print('test delay job runner') global editor editor = CodeEdit() job_runner = utils.DelayJobRunner() job_runner.request_job(job) QTest.qWait(1000) job_runner.request_job(job) QTest.qWait(1000)
def clone_settings(self, original): self.color = original.color self.foreground = original.foreground if __name__ == '__main__': import locale import sys from pyqode.core.api import CodeEdit def simulate_open(): pnl.on_open_failed(__file__, locale.getpreferredencoding()) def simulate_save(): # pass # print(pnl) # print(pnl.on_save_failed) pnl.on_save_failed(__file__, locale.getpreferredencoding()) app = QtWidgets.QApplication(sys.argv) # app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) edit = CodeEdit() edit.setMinimumSize(800, 600) edit.file.open(__file__) pnl = EncodingPanel() edit.panels.append(pnl, pnl.Position.TOP) edit.show() simulate_open() QtCore.QTimer.singleShot(5000, simulate_save) app.exec_()
def setupUi(self, Form): Form.setObjectName("Form") Form.resize(753, 580) self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout.setObjectName("verticalLayout") self.scrollArea = QtWidgets.QScrollArea(Form) self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 741, 568)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.groupBox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox.setObjectName("groupBox") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label = QtWidgets.QLabel(self.groupBox) self.label.setObjectName("label") self.horizontalLayout_2.addWidget(self.label) self.fontComboBox = QtWidgets.QFontComboBox(self.groupBox) self.fontComboBox.setFontFilters(QtWidgets.QFontComboBox.MonospacedFonts) font = QtGui.QFont() font.setFamily("DejaVu Sans Mono") self.fontComboBox.setCurrentFont(font) self.fontComboBox.setObjectName("fontComboBox") self.horizontalLayout_2.addWidget(self.fontComboBox) self.label_3 = QtWidgets.QLabel(self.groupBox) self.label_3.setObjectName("label_3") self.horizontalLayout_2.addWidget(self.label_3) self.spinbox_font_size = QtWidgets.QSpinBox(self.groupBox) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.spinbox_font_size.sizePolicy().hasHeightForWidth()) self.spinbox_font_size.setSizePolicy(sizePolicy) self.spinbox_font_size.setMinimum(8) self.spinbox_font_size.setObjectName("spinbox_font_size") self.horizontalLayout_2.addWidget(self.spinbox_font_size) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.verticalLayout_2.addWidget(self.groupBox) self.groupBox_2 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox_2.setObjectName("groupBox_2") self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox_2) self.horizontalLayout.setObjectName("horizontalLayout") self.label_4 = QtWidgets.QLabel(self.groupBox_2) self.label_4.setObjectName("label_4") self.horizontalLayout.addWidget(self.label_4) self.combo_color_schemes = QtWidgets.QComboBox(self.groupBox_2) self.combo_color_schemes.setObjectName("combo_color_schemes") self.horizontalLayout.addWidget(self.combo_color_schemes) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.verticalLayout_2.addWidget(self.groupBox_2) self.groupBox_3 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox_3.setObjectName("groupBox_3") self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_3) self.gridLayout_2.setObjectName("gridLayout_2") self.edit_preview = CodeEdit(self.groupBox_3) self.edit_preview.setObjectName("edit_preview") self.gridLayout_2.addWidget(self.edit_preview, 0, 0, 1, 1) self.verticalLayout_2.addWidget(self.groupBox_3) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.verticalLayout.addWidget(self.scrollArea) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form)
""" 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.core.backend import server from pyqode.core.modes import IndenterMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(IndenterMode())) editor.show() editor.appendPlainText( ' Press TAB then Shift+Tab') app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the CaretLineHighlighterMode. This example editor does not have a SyntaxHighlighterMode, the caret line color is simply derived from the background color (darker for white background, lighter for dark background) """ 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 if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(CaretLineHighlighterMode())) editor.show() editor.appendPlainText('\n' * 10) app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the QuickDockPanel. """ 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.panels import QuickDocPanel 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.panels.append(QuickDocPanel(), QuickDocPanel.Position.BOTTOM) editor.show() editor.setPlainText( '''# Press Alt+Q on a symbol to get its documentation import os class Foo: """ A foo class """
self.cancel_requested.emit(self.editor) self.hide() def clone_settings(self, original): self.color = original.color self.foreground = original.foreground if __name__ == '__main__': import locale import sys from pyqode.core.api import CodeEdit def simulate_open(): pnl.on_open_failed(__file__, locale.getpreferredencoding()) def simulate_save(): pnl.on_save_failed(__file__, locale.getpreferredencoding()) app = QtWidgets.QApplication(sys.argv) # app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) edit = CodeEdit() edit.setMinimumSize(800, 600) edit.file.open(__file__) pnl = EncodingPanel() edit.panels.append(pnl, pnl.Position.TOP) edit.show() simulate_open() QtCore.QTimer.singleShot(5000, simulate_save) app.exec_()
""" Minimal example showing the use of the ZoomMode. """ 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 ZoomMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(ZoomMode())) editor.appendPlainText('Use Ctrl+Mouse wheel to zoom in/out\n' 'Ctrl++ and Ctrl+- can also be used\n' 'Ctrl+0 resets the editor zoom level to 0') editor.show() app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the GoToAssignmentsMode. """ 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 GoToAssignmentsMode, PythonSH if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(GoToAssignmentsMode())) editor.modes.append(PythonSH(editor.document())) # looks better editor.show() editor.appendPlainText( '''press_me = 10 def spam(): # press Ctrl+Left click on ``press_me`` to go to its definition print(press_me) ''') app.exec_() editor.close()
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
""" 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 from pyqode.core.backend import server from pyqode.core.modes import AutoCompleteMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(AutoCompleteMode())) editor.appendPlainText( 'Press one of these keys to test auto completion: ", \', (, {, [\n') editor.show() app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the PEP8CheckerMode. """ import logging logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit from pyqode.core.panels import CheckerPanel from pyqode.python.backend import server from pyqode.python.modes import PEP8CheckerMode, PythonSH if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(PEP8CheckerMode())) editor.modes.append(PythonSH(editor.document())) # looks better editor.panels.append(CheckerPanel()) editor.show() editor.setPlainText('class Foo:\n\n\ndef __init__(self):\n\npass', 'text/x-python', 'utf-8') app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the ZoomMode. """ 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 ZoomMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(ZoomMode())) editor.appendPlainText( 'Use Ctrl+Mouse wheel to zoom in/out\n' 'Ctrl++ and Ctrl+- can also be used\n' 'Ctrl+0 resets the editor zoom level to 0') editor.show() 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
def setupUi(self, Form): Form.setObjectName("Form") Form.resize(753, 580) self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout.setObjectName("verticalLayout") self.scrollArea = QtWidgets.QScrollArea(Form) self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 741, 568)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.verticalLayout_2 = QtWidgets.QVBoxLayout( self.scrollAreaWidgetContents) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.groupBox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox.setObjectName("groupBox") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label = QtWidgets.QLabel(self.groupBox) self.label.setObjectName("label") self.horizontalLayout_2.addWidget(self.label) self.fontComboBox = QtWidgets.QFontComboBox(self.groupBox) self.fontComboBox.setFontFilters( QtWidgets.QFontComboBox.MonospacedFonts) font = QtGui.QFont() font.setFamily("DejaVu Sans Mono") self.fontComboBox.setCurrentFont(font) self.fontComboBox.setObjectName("fontComboBox") self.horizontalLayout_2.addWidget(self.fontComboBox) self.label_3 = QtWidgets.QLabel(self.groupBox) self.label_3.setObjectName("label_3") self.horizontalLayout_2.addWidget(self.label_3) self.spinbox_font_size = QtWidgets.QSpinBox(self.groupBox) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.spinbox_font_size.sizePolicy().hasHeightForWidth()) self.spinbox_font_size.setSizePolicy(sizePolicy) self.spinbox_font_size.setMinimum(8) self.spinbox_font_size.setObjectName("spinbox_font_size") self.horizontalLayout_2.addWidget(self.spinbox_font_size) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.verticalLayout_2.addWidget(self.groupBox) self.groupBox_2 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox_2.setObjectName("groupBox_2") self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox_2) self.horizontalLayout.setObjectName("horizontalLayout") self.label_4 = QtWidgets.QLabel(self.groupBox_2) self.label_4.setObjectName("label_4") self.horizontalLayout.addWidget(self.label_4) self.combo_color_schemes = QtWidgets.QComboBox(self.groupBox_2) self.combo_color_schemes.setObjectName("combo_color_schemes") self.horizontalLayout.addWidget(self.combo_color_schemes) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.verticalLayout_2.addWidget(self.groupBox_2) self.groupBox_3 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox_3.setObjectName("groupBox_3") self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_3) self.gridLayout_2.setObjectName("gridLayout_2") self.edit_preview = CodeEdit(self.groupBox_3) self.edit_preview.setObjectName("edit_preview") self.gridLayout_2.addWidget(self.edit_preview, 0, 0, 1, 1) self.verticalLayout_2.addWidget(self.groupBox_3) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.verticalLayout.addWidget(self.scrollArea) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form)
- 1 warning message on line 2 - 1 error message on line 3 :param request: request data (dict). :return: True, list of messages """ return [ ('An information message', CheckerMessages.INFO, 0), ('A warning message', CheckerMessages.WARNING, 100), ('An error message', CheckerMessages.ERROR, 200), ] if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) editor.setCenterOnScroll(False) # use a string instead of the function directly (otherwise we # get __main__.check instead of checker.check) # print(editor.modes.append(CheckerMode(check))) # does not work if # function is in main # module print(editor.modes.append(CheckerMode('global_checker.check'))) print( editor.panels.append(GlobalCheckerPanel(), GlobalCheckerPanel.Position.RIGHT)) # we could also use the pyqode.python.backend like this (uncomment the next # two lines if you have pyqode.python)
""" Minimal example showing the use of the SymbolMatcherMode. """ 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 SymbolMatcherMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(SymbolMatcherMode())) editor.appendPlainText('(----(j\njj)\n)') editor.show() 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
""" 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.core.backend import server from pyqode.core.modes import AutoIndentMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(AutoIndentMode())) editor.show() editor.appendPlainText( ' Please press "RETURN"; the cursor should align with this line') 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.core.backend import server from pyqode.core.modes import IndenterMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(IndenterMode())) editor.show() editor.appendPlainText(' Press TAB then Shift+Tab') app.exec_() editor.close() del editor del app
def test_key_pressed(): # " -> "" editor = CodeEdit() editor.modes.append(modes.AutoCompleteMode()) editor.setPlainText('', '', 'utf-8') QTest.keyPress(editor, '"') assert editor.toPlainText() == '""' editor.clear() # if a " already exists, cursor should just move after " and a new " should # not be inserted editor.setPlainText('"', 'text/x-python', 'utf-8') TextHelper(editor).goto_line(0, 0) QTest.keyPress(editor, '"') assert editor.toPlainText() == '"' editor.clear() # if a ) already exists, cursor should just move after ) and a new ) should # not be inserted editor.setPlainText(')', 'text/x-python', 'utf-8') TextHelper(editor).goto_line(0, 0) QTest.keyPress(editor, ')') QTest.qWait(1000) assert editor.toPlainText() == ')' # ] should be inserted ")" -> "])" TextHelper(editor).goto_line(0, 0) QTest.keyPress(editor, ']') QTest.qWait(1000) assert editor.toPlainText() == '])'
""" Minimal example showing the use of the PyAutoCompleteMode. """ 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 PyAutoCompleteMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(PyAutoCompleteMode())) editor.appendPlainText('# Please press "("\n' 'class Foo:\n' ' def bar') editor.show() app.exec_() editor.close() del editor del app
""" 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 SearchAndReplacePanel. """ 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.panels import SearchAndReplacePanel if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) editor.panels.append(SearchAndReplacePanel(), SearchAndReplacePanel.Position.TOP) editor.setPlainText('Pres Ctrl+F to search text in the document', '', '') editor.show() 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 PyAutoCompleteMode. """ 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 PyAutoCompleteMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(PyAutoCompleteMode())) editor.appendPlainText( '# Please press "("\n' 'class Foo:\n' ' def bar') editor.show() app.exec_() editor.close() del editor del app
- 1 warning message on line 2 - 1 error message on line 3 :param request: request data (dict). :return: True, list of messages """ return [ ('An information message', CheckerMessages.INFO, 0), ('A warning message', CheckerMessages.WARNING, 100), ('An error message', CheckerMessages.ERROR, 200), ] if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) editor.setCenterOnScroll(False) # use a string instead of the function directly (otherwise we # get __main__.check instead of checker.check) # print(editor.modes.append(CheckerMode(check))) # does not work if # function is in main # module print(editor.modes.append(CheckerMode('global_checker.check'))) print(editor.panels.append(GlobalCheckerPanel(), GlobalCheckerPanel.Position.RIGHT)) # we could also use the pyqode.python.backend like this (uncomment the next # two lines if you have pyqode.python) # from pyqode.python.backend import run_pep8
""" Minimal example showing the use of the CaseConverterMode. """ 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 CaseConverterMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(CaseConverterMode())) editor.show() editor.setPlainText( 'Press Ctrl+Shift+U to convert selected text to upper case\n' 'and Ctrl+U to convert the text to lower case.', '', '') editor.selectAll() app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the CalltipsMode. """ 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 CalltipsMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(CalltipsMode())) editor.show() editor.appendPlainText( 'import os\nos.path.join') app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the SmartBackSpaceMode. """ import logging logging.basicConfig(level=logging.DEBUG) import sys from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit, TextHelper from pyqode.core.backend import server from pyqode.core.modes import SmartBackSpaceMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(SmartBackSpaceMode())) editor.show() editor.appendPlainText( ' Please press "BACKSPACE"; the 4 whitespaces should be deleted ' 'with a single key press') TextHelper(editor).goto_line(0, 4) 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
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 OccurrencesHighlighterMode. """ 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 OccurrencesHighlighterMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(OccurrencesHighlighterMode())) editor.setPlainText( 'mode\nmode\nmodes\npanel\nmode', '', '') editor.show() app.exec_() editor.close() del editor del app
""" 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.panels import QuickDocPanel 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.panels.append(QuickDocPanel(), QuickDocPanel.Position.BOTTOM) editor.show() editor.setPlainText( '''# Press Alt+Q on a symbol to get its documentation import os class Foo: """ A foo class """
""" 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 from pyqode.core.backend import server from pyqode.core.modes import RightMarginMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) margin = editor.modes.append(RightMarginMode()) margin.position = 4 editor.file.open(__file__) editor.show() app.exec_() editor.close() del editor del app
- 1 warning message on line 2 - 1 error message on line 3 :param request: request data (dict). :return: True, list of messages """ return [ ('An information message', CheckerMessages.INFO, 0), ('A warning message', CheckerMessages.WARNING, 1), ('An error message', CheckerMessages.ERROR, 2), ] if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) # use a string instead of the function directly (otherwise we # get __main__.check instead of checker.check) # print(editor.modes.append(CheckerMode(check))) # does not work if # function is in main # module print(editor.modes.append(CheckerMode('checker.check'))) # we could also use the pyqode.python.backend like this (uncomment the next # two lines if you have pyqode.python) # from pyqode.python.backend import run_pep8 # print(editor.modes.append(CheckerMode(run_pep8))) editor.show() editor.appendPlainText('AAA\n' * 4)
""" Minimal example showing the use of the GoToAssignmentsMode. """ 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 GoToAssignmentsMode, PythonSH if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(GoToAssignmentsMode())) editor.modes.append(PythonSH(editor.document())) # looks better editor.show() editor.appendPlainText('''press_me = 10 def spam(): # press Ctrl+Left click on ``press_me`` to go to its definition print(press_me) ''') app.exec_() editor.close() del editor
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
""" Minimal example showing the use of the OccurrencesHighlighterMode. """ 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 OccurrencesHighlighterMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(OccurrencesHighlighterMode())) editor.setPlainText( 'mode\nmode\nmodes\npanel\nmode', '', '') editor.show() 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 ExtendedSelectionMode. """ 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 ExtendedSelectionMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(ExtendedSelectionMode())) editor.file.open(__file__) editor.show() app.exec_() editor.close() del editor del app
""" Minimal example showing the use of the SymbolMatcherMode. """ 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 SymbolMatcherMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(SymbolMatcherMode())) editor.appendPlainText( '(----(j\njj)\n)') editor.show() app.exec_() editor.close() del editor del app