我正在尝试制作一个简单的 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())```
self.text_updated() 调用适用 self.markdown_editor.textChanged.connect(self.switch)。
注释掉 self.text_updated() 将验证这一点。
因此,每次您尝试输入文本时,它都会将活动小部件切换回“仅查看”小部件(self.markdown_viewer)。
我对 obsidainMD 不熟悉,因此无法提供有关如何实现该特定效果的任何建议。请随时在评论中提供更多信息。