Python PyQt5中带有可单击文本的QPlainTextEdit小部件
我试图在PyQt5中构建一个简单的代码/文本编辑器。我想到了代码编辑器的三个重要功能:Python PyQt5中带有可单击文本的QPlainTextEdit小部件,python,qt,pyqt,pyqt5,Python,Qt,Pyqt,Pyqt5,我试图在PyQt5中构建一个简单的代码/文本编辑器。我想到了代码编辑器的三个重要功能: (1) 语法突出显示 (2) 代码完成 (3) 可点击的函数和变量 我计划将代码编辑器建立在QPlainTextEdit小部件上。对于语法突出显示,我将使用QSyntaxHighlighter: 我还没有弄明白如何完成代码,但稍后会担心这个特性。现在最重要的是“可点击的函数和变量”。在成熟的代码编辑器中,可以单击函数调用并跳转到该函数的定义。变量也是如此。 我知道,问“我如何实现这个特性?”太宽泛了。因
(1) 语法突出显示
(2) 代码完成
(3) 可点击的函数和变量
我计划将代码编辑器建立在
QPlainTextEdit
小部件上。对于语法突出显示,我将使用QSyntaxHighlighter
:我还没有弄明白如何完成代码,但稍后会担心这个特性。现在最重要的是“可点击的函数和变量”。在成熟的代码编辑器中,可以单击函数调用并跳转到该函数的定义。变量也是如此。
我知道,问“我如何实现这个特性?”太宽泛了。因此,让我们把范围缩小到以下问题:
如何使某个单词在
QPlainTextEdit
小部件中可单击?单击单词时,应调用任意Python函数。Python函数还应该知道单击哪个词来采取适当的操作。当鼠标悬停在单词上方时,使其亮起蓝色是一个不错的奖励。
我编写了一个小的测试代码,所以你有一个QT窗口,上面有一个“代码> QPrimeTeTdIs< /Cult>小部件,用来播放: 代码如下:
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()
导入系统
导入操作系统
从PyQt5.QtWidgets导入*
从PyQt5.QtGui导入*
从PyQt5.QtCore导入*
##################################################
#“testText”是一段#
#将显示在文本编辑器中#
##################################################
testText=\
#包括\n\
#包括\n\
#包括\n\
#包括“./FreeRTOS/Kernel/Kernel.h”\n\
\n\
int main(无效)\n\
{\n\
/*重置所有外围设备*/\n\
HAL_Init();\n\
\n\
/*配置系统时钟*/\n\
SystemClock_Config();\n\
\n\
/*初始化所有配置的外围设备*/\n\
MX_GPIO_Init();\n\
MX_SPI1_Init();\n\
MX_SPI2_Init();\n\
MX_SPI3_Init();\n\
}\n\
'
##################################################
#一个简单的文本编辑器#
# #
##################################################
类MyMainWindow(QMainWindow):
定义初始化(自):
超级(MyMainWindow,self)。\uu初始化
#定义主窗口的几何图形
self.setGeometry(200200800800)
self.setWindowTitle(“文本编辑器测试”)
#创建中心框架
self.centerFrm=QFrame(self)
self.centerFrm.setStyleSheet(“QWidget{背景色:#ddeeff;}”)
self.centerLyt=QVBoxLayout()
self.centerFrm.setLayout(self.centerLyt)
self.setCentralWidget(self.centerFrm)
#创建QTextEdit
self.myTextEdit=QPlainTextEdit()
self.myTextEdit.setPlainText(testText)
self.myTextEdit.setStyleSheet(“QPlainTextEdit{背景色:#ffffff;}”)
self.myTextEdit.setMinimumHeight(500)
self.myTextEdit.setMaximumHeight(500)
self.myTextEdit.setMinimumWidth(700)
self.myTextEdit.setMaximumWidth(700)
self.centerLyt.addWidget(self.mytexEdit)
self.show()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=QApplication(sys.argv)
QApplication.setStyle(QStyleFactory.create('Fusion'))
myGUI=MyMainWindow()
app.exec()
戴尔应用程序
sys.exit()
编辑
过了很长时间,我才重新考虑这个问题。同时,我还建立了一个关于QSCINTILA的网站:
您可以在那里找到所有信息:-)也许您可以利用。看起来它能满足你的需要。如果你不能使用它,那么也许你可以看看源代码,看看它们是如何实现不同的功能的,比如可点击文本。使用:它内置了对大部分(如果不是全部的话)你想要的功能的支持。我试过QSCINTILA。我不知怎的让语法高亮显示工作起来了。但是QSCINTILA的Python端口的文档几乎不存在,或者说非常差。你知道一个很好的教程@ekhumoro吗?不,我只是用官方文件加上自己的文件。我相信谷歌搜索一下会给你提供一些基本的例子,肯定还有一些东西。非常感谢@ekhumoro。如何在QSCINTILA中实现可点击单词?我一直在谷歌上搜索,但找不到。