2016-10-02 11 views
1

PyQt5で簡単なコード/テキストエディタを構築しようとしています。コード・エディタの三つの重要な機能の私の頭に浮かぶ:
(1)構文

(2)コード補完をハイライト表示(3)クリッカブル関数と変数

私がベースに計画コードエディタはQPlainTextEditウィジェットにあります。構文の強調表示については、QSyntaxHighlighterを使用します:

コード補完の方法はまだわかりませんが、後でその機能について心配しています。今すぐshowstopperは「クリック可能な関数と変数」です。成熟したコードエディタでは、関数呼び出しをクリックして、その関数の定義にジャンプすることができます。変数についても同様です。

「この機能を実装するにはどうすればよいですか?あまりにも広いです。それでは、次の問題に絞りましょう:
QPlainTextEditウィジェットで特定の単語をクリックできるようにするにはどうすればよいですか?単語がクリックされると、任意のPython関数が呼び出されます。そのPython関数は、適切なアクションをとるためにどの単語がクリックされたかを知る必要があります。マウスの上にマウスを置くと、単語が明るくなり、素晴らしいボーナスになります。

あなたと遊ぶために途中でQPlainTextEditウィジェットとQtのウィンドウを持っているので、私は、小さなテスト・コードを書かれている:ここで enter image description here
QPlainTextEditクリック可能なテキスト付きPyQt5のウィジェット

は、コードは次のとおりです。

import sys 
import os 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 
from PyQt5.QtCore import * 

################################################## 
# 'testText' is a snippet of C-code that  # 
# will get displayed in the text editor.  # 
################################################## 
testText = '\ 
# include <stdio.h>\n\ 
# include <stdbool.h>\n\ 
# include <stdint.h>\n\ 
# include "../FreeRTOS/Kernel/kernel.h"\n\ 
\n\ 
int main(void)\n\ 
{\n\ 
    /* Reset all peripherals*/\n\ 
    HAL_Init();\n\ 
\n\ 
    /* Configure the system clock */\n\ 
    SystemClock_Config();\n\ 
\n\ 
    /* Initialize all configured peripherals */\n\ 
    MX_GPIO_Init();\n\ 
    MX_SPI1_Init();\n\ 
    MX_SPI2_Init();\n\ 
    MX_SPI3_Init();\n\ 
}\n\ 
' 

################################################## 
# A simple text editor       # 
#            # 
################################################## 
class MyMainWindow(QMainWindow): 
    def __init__(self): 
     super(MyMainWindow, self).__init__() 
     # Define the geometry of the main window 
     self.setGeometry(200, 200, 800, 800) 
     self.setWindowTitle("text editor test") 

     # Create center frame 
     self.centerFrm = QFrame(self) 
     self.centerFrm.setStyleSheet("QWidget { background-color: #ddeeff; }") 
     self.centerLyt = QVBoxLayout() 
     self.centerFrm.setLayout(self.centerLyt) 
     self.setCentralWidget(self.centerFrm) 

     # Create QTextEdit 
     self.myTextEdit = QPlainTextEdit() 
     self.myTextEdit.setPlainText(testText) 
     self.myTextEdit.setStyleSheet("QPlainTextEdit { background-color: #ffffff; }") 
     self.myTextEdit.setMinimumHeight(500) 
     self.myTextEdit.setMaximumHeight(500) 
     self.myTextEdit.setMinimumWidth(700) 
     self.myTextEdit.setMaximumWidth(700) 

     self.centerLyt.addWidget(self.myTextEdit) 
     self.show() 


if __name__== '__main__': 
    app = QApplication(sys.argv) 
    QApplication.setStyle(QStyleFactory.create('Fusion')) 
    myGUI = MyMainWindow() 
    app.exec_() 
    del app 
    sys.exit() 

EDIT
私はこの質問を長年にわたって再訪しました。あなたはたぶん、あなたはqutepartを利用することができ

+0

[QScintilla](http://pyqt.sourceforge.net/Docs/QScintilla2/)を使用してください。すべてではないにしても、ほとんどのものをサポートしています。 – ekhumoro

+0

QScintillaを試しました。私は何とか構文の強調表示が働いています。しかし、QScintillaのPythonポートのドキュメンテーションは、ほとんど存在しないか、言い表すのが非常に貧弱です。あなたは良いチュートリアルをよく知っていますか? –

+0

いいえ、私は公式ドキュメントと[Scintilla](http://www.scintilla.org/ScintillaDoc.html)自体のものを使用しています。私はちょっとグーグルがあなたにいくつかの基本的な例を得るだろうと確信しています、そしてSOにいくつかのことがあるでしょう。 – ekhumoro

答えて

1

:-)そこにすべての情報を見つけることができますhttps://qscintilla.com
:一方で、私はQScintillaについてのウェブサイトを構築してきました。それはあなたが必要とするように見えます。それを使用できない場合は、ソースコードを見て、クリック可能なテキストなどのさまざまな機能を実装した方法を確認できます。

関連する問題