大佬教程收集整理的这篇文章主要介绍了使用 PyQt5 渲染 Markdown,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
如何在我的 PyQt5 应用程序中呈现降价文件?
Here 我读到@R_660_10675@用 QWebENGIneVIEw 而不是 QTextEdit,因为 QTextEdit 无法呈现外部图像。
有人在评论中引用了 this 示例。然而,它是一个完整的 Markdown 文本编辑器,并且是用 C++ 编写的。我试图将所需的部分翻译成 Python,但我不太明白它是如何工作的。我只需要一个最小的例子。
我现在拥有的是以下内容:
from PyQt5.QtWebChAnnel import QWebChAnnel
from PyQt5.QtWebENGIneWidgets import QWebENGIneVIEw,QWebENGInePage
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
import sys
app = QApplication(sys.argv)
web_Widget = QWebENGIneVIEw()
webChAnnel = QWebChAnnel() # ?
page = QWebENGInePage() # ?
web_Widget.setPage(pagE) # ?
my_url = QUrl("/index.HTML")
web_Widget.load(my_url)
# Now somehow replace the placeholder in the loaded HTML page with file contents?
file_url = QUrl("file.md")
# Help
web_Widget.show()
app.exec_()
QTextEdit 从 Qt 5.14 开始可以渲染 Markdown,但正如 OP 指出的那样,它有一个限制:它不能渲染远程图像。所以另一种方法是使用 QWebENGIneView + js 库,如 markdown.js 和marked.js,如官方示例所示。您还可以使用 QNetworkAccessmanager 下载远程 .md 文件。
import os.path
import sys
from PyQt5.QtCore import pyqtProperty,pyqtSignal,QObject,QTextCodec,QUrl
from PyQt5.QtNetwork import QNetworkAccessmanager,QNetworkReply,QNetworkrequest
from PyQt5.QtWebChAnnel import QWebChAnnel
from PyQt5.QtWebENGIneWidgets import QWebENGIneView,QWebENGInePage
from PyQt5.QtWidgets import QApplication
CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
class Document(QObject):
textChanged = pyqtSignal(str)
def __init__(self,parent=NonE):
super().__init__(parent)
self.m_text = ""
def get_text(self):
return self.m_text
def set_text(self,text):
if self.m_text == text:
return
self.m_text = text
self.textChanged.emit(self.m_text)
text = pyqtProperty(str,fget=get_text,fset=set_text,notify=textChanged)
class DownloadManager(QObject):
finished = pyqtSignal(str)
def __init__(self,parent=NonE):
super().__init__(parent)
self._manager = QNetworkAccessmanager()
self.manager.finished.connect(self.handle_finished)
@property
def manager(self):
return self._manager
def start_download(self,url):
self.manager.get(QNetworkrequest(url))
def handle_finished(self,reply):
if reply.error() != QNetworkReply.NoError:
print("error: ",reply.errorString())
return
codec = QTextCodec.codecForName("UTF-8")
raw_data = codec.toUnicode(reply.readAll())
self.finished.emit(raw_data)
def main():
app = QApplication(sys.argv)
filename = os.path.join(CURRENT_DIR,"index.html")
document = Document()
download_manager = DownloadManager()
chAnnel = QWebChAnnel()
chAnnel.registerObject("content",document)
# remote file
markdown_url = QUrl.fromUserInput(
"https://raw.githubusercontent.com/eyllanesc/stackoverflow/master/README.md"
)
# local file
# markdown_url = QUrl.fromUserInput(/path/of/markdown.md)
download_manager.finished.connect(document.set_text)
download_manager.start_download(markdown_url)
view = QWebENGIneView()
view.page().setWebChAnnel(chAnnel)
url = QUrl.fromLocalFile(fileName)
view.load(url)
view.resize(640,480)
view.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
index.html
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<head>
<link rel="stylesheet" type="text/css" href="3rdparty/markdown.css">
<script src="3rdparty/marked.js"></script>
<script src="qrc:/qtwebchAnnel/qwebchAnnel.js"></script>
</head>
<body>
<div id="placeholder"></div>
<script>
'use Strict';
var placeholder = document.getElementById('placeholder');
var updateText = function(text) {
placeholder.innerHTML = marked(text);
}
new QWebChAnnel(qt.webChAnnelTransport,function(chAnnel) {
var content = chAnnel.objects.content;
updateText(content.text);
content.textChanged.connect(updateText);
}
);
</script>
</body>
</html>
├── 3rdparty
│ ├── markdown.css
│ ├── MARKDOWN-LICENSE.txt
│ ├── marked.js
│ ├── MARKED-LICENSE.txt
│ └── qt_attribution.json
├── index.html
└── main.py
注意:3rdparty文件夹中的文件在the official Qt repository.
以上是大佬教程为你收集整理的使用 PyQt5 渲染 Markdown全部内容,希望文章能够帮你解决使用 PyQt5 渲染 Markdown所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。