如何使用 Python PyQt6 制作一个既能够接受 Markdown 输入又能够显示渲染(如果这是正确的词)输出的功能?

问题描述 投票:0回答:1

我正在尝试制作一个简单的 Markdown 编辑器,我对 Python 相当陌生,并且我正在使用 PyQt6,并尝试制作一个 Markdown 编辑器,而不是让窗口的 1 部分显示 Markdown 文本,另一部分显示显示渲染的。 TextEdit 小部件能够接受输入,还可以显示除正在编辑的行之外的所有行的渲染输出,就像 obsidainMD 的做法一样。

这是我正在尝试的代码,这是一段简单的代码,可以在输入文本时更改小部件,但现在每次我输入字母时它都会更改,我需要手动将其更改回来,这不是没有我想要的东西。

from PyQt6 import QtCore, QtGui, QtWidgets

# This isn't live view but the stakcable widgets might be something that we can use 

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.stacked_widget = QtWidgets.QStackedWidget()
        self.setCentralWidget(self.stacked_widget)

        self.markdown_editor = QtWidgets.QTextEdit()
        self.markdown_viewer = QtWidgets.QTextEdit(readOnly=True)

        self.stacked_widget.addWidget(self.markdown_editor)
        self.stacked_widget.addWidget(self.markdown_viewer)

        foo_menu = self.menuBar().addMenu("&FooMenu")
        self.edit_action = foo_menu.addAction("&Edit")
        self.edit_action.setCheckable(True)
        self.edit_action.triggered.connect(self.handle_edit_mode)
        self.text_updated()

    def handle_edit_mode(self):
        self.stacked_widget.setCurrentWidget(
            self.markdown_viewer
            if self.edit_action.isChecked()
            else self.markdown_editor
        )
        if self.stacked_widget.currentWidget() == self.markdown_viewer:
            self.markdown_viewer.setMarkdown(self.markdown_editor.toPlainText())
    def switch(self):
        print("Function switch run")
        self.stacked_widget.setCurrentWidget(self.markdown_viewer)
        self.edit_action.setChecked(False)
        
    def text_updated(self):
        self.markdown_editor.textChanged.connect(self.switch)
        print("Text updated")


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    w = MainWindow()
    w.show()

    sys.exit(app.exec())```

python pyqt6
1个回答
0
投票

self.text_updated() 调用适用 self.markdown_editor.textChanged.connect(self.switch)。

注释掉 self.text_updated() 将验证这一点。

因此,每次您尝试输入文本时,它都会将活动小部件切换回“仅查看”小部件(self.markdown_viewer)。

我对 obsidainMD 不熟悉,因此无法提供有关如何实现该特定效果的任何建议。请随时在评论中提供更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.