-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathcustom.py
More file actions
86 lines (75 loc) · 3.13 KB
/
custom.py
File metadata and controls
86 lines (75 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""
A basic example that show you how to create a basic python code editor widget,
from scratch.
Editor features:
- syntax highlighting
- code completion (using jedi)
- code folding
- auto indentation
- auto complete
- comments mode (ctrl+/)
- calltips mode
- linters (pyflakes and pep8) modes + display panel
- line number panel
- builtin search and replace panel
"""
import logging
logging.basicConfig()
# optionally, set the qt api to use (in ['pyqt4', 'pyqt5', 'pyside'])
# import os; os.environ['QT_API'] = 'pyside'
import sys
from pyqode.qt import QtWidgets
from pyqode.python.backend import server
from pyqode.core import api, modes, panels
from pyqode.python import modes as pymodes, panels as pypanels, widgets
from pyqode.python.folding import PythonFoldDetector
from pyqode.python.backend.workers import defined_names
class MyPythonCodeEdit(widgets.PyCodeEditBase):
def __init__(self):
super(MyPythonCodeEdit, self).__init__()
# starts the default pyqode.python server (which enable the jedi code
# completion worker).
self.backend.start(server.__file__)
# some other modes/panels require the analyser mode, the best is to
# install it first
self.modes.append(modes.OutlineMode(defined_names))
#--- core panels
self.panels.append(panels.FoldingPanel())
self.panels.append(panels.LineNumberPanel())
self.panels.append(panels.CheckerPanel())
self.panels.append(panels.SearchAndReplacePanel(),
panels.SearchAndReplacePanel.Position.BOTTOM)
self.panels.append(panels.EncodingPanel(), api.Panel.Position.TOP)
# add a context menu separator between editor's
# builtin action and the python specific actions
self.add_separator()
#--- python specific panels
self.panels.append(pypanels.QuickDocPanel(), api.Panel.Position.BOTTOM)
#--- core modes
self.modes.append(modes.CaretLineHighlighterMode())
self.modes.append(modes.CodeCompletionMode())
self.modes.append(modes.ExtendedSelectionMode())
self.modes.append(modes.FileWatcherMode())
self.modes.append(modes.OccurrencesHighlighterMode())
self.modes.append(modes.RightMarginMode())
self.modes.append(modes.SmartBackSpaceMode())
self.modes.append(modes.SymbolMatcherMode())
self.modes.append(modes.ZoomMode())
#--- python specific modes
self.modes.append(pymodes.CommentsMode())
self.modes.append(pymodes.CalltipsMode())
self.modes.append(pymodes.PyFlakesChecker())
self.modes.append(pymodes.PEP8CheckerMode())
self.modes.append(pymodes.PyAutoCompleteMode())
self.modes.append(pymodes.PyAutoIndentMode())
self.modes.append(pymodes.PyIndenterMode())
self.modes.append(pymodes.PythonSH(self.document()))
self.syntax_highlighter.fold_detector = PythonFoldDetector()
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
editor = MyPythonCodeEdit()
editor.file.open(__file__)
window.setCentralWidget(editor)
window.show()
app.exec_()
editor.close()