forked from DerThorsten/orthos
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtext_editor.py
89 lines (77 loc) · 3.25 KB
/
text_editor.py
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
87
88
89
"""
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.modes import PythonSH
from pyqode.core.api import CodeEdit, ColorScheme
from pyqode.python.panels import QuickDocPanel
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(pymodes.DocumentAnalyserMode())
#--- 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.FrostedCheckerMode())
#self.modes.append(pymodes.PEP8CheckerMode())
self.modes.append(pymodes.PyAutoCompleteMode())
self.modes.append(pymodes.PyAutoIndentMode())
self.modes.append(pymodes.PyIndenterMode())
sh = self.modes.append(PythonSH(self.document()))
# change its color scheme (from pygments)
sh.color_scheme = ColorScheme('monokai')
self.panels.append(QuickDocPanel(), QuickDocPanel.Position.BOTTOM)
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
editor = MyPythonCodeEdit()
editor.file.open(__file__)
window.setCentralWidget(editor)
window.show()
app.exec_()