运行时错误:调用Python对象时超出最大递归深度的"RuntimeError"错误在PyQt4 Python中。

2024-04-19 23:16:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用PyQt4^{}syntex荧光笔创建一个简单的文本编辑器。我有以下代码。在

from PyQt4 import QtCore, QtGui
import time,sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from pygments import highlight
from pygments.lexers import PythonLexer,get_lexer_by_name
from pygments.formatters import HtmlFormatter
def highlighter():
        text = area.toPlainText()
        result = highlight(text, lexer, formatter)
        area.setText(result)

code = 'print ("Hello World")\n# Test Program'

lexer = get_lexer_by_name("python3", stripall=True)
formatter = HtmlFormatter(linenos=False,style='colorful')
formatter.noclasses = True
result = highlight(code, lexer, formatter)

app = QApplication(sys.argv)
w=QWidget()
w.setGeometry(500,400,350,350)

area = QTextEdit(w)
area.setGeometry(0,10,350,340)
area.setText(result)
area.textChanged.connect(highlighter)

w.show()
sys.exit(app.exec_())

当它第一次加载时,它输出正确,但如果我在QTextEdit中键入一个单词,它将等待1-2秒并显示以下错误:

^{pr2}$

做了很多事情我都忍不住了。我不知道我哪里做错了。请帮帮我。在


Tags: namefromimportgetbypygmentsformattersys
1条回答
网友
1楼 · 发布于 2024-04-19 23:16:38

您的highlighter()函数调用area.setText(),它将发出textChanged信号,该信号连接到highlighter,后者调用{},后者。。。等等。在

对于QTextEdit,当调用setText()方法时,textChaged信号始终会发出,即使可见文本内容实际上没有更改,因为其内部表示形式确实发生了更改。在

在您的情况下,一个简单的解决方法是在调用setText()时阻止信号的传递:

def highlighter():
        text = area.toPlainText()
        result = highlight(text, lexer, formatter)
        area.blockSignals(True)
        pos = area.textCursor().position()
        area.setText(result)
        cursor = area.textCursor()
        cursor.setPosition(min(pos, len(area.toPlainText())))
        area.setTextCursor(cursor)
        area.blockSignals(False)

相关问题 更多 >