Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在同一文本输入框中实现实时降价预览?_Python_Pyqt - Fatal编程技术网

Python 如何在同一文本输入框中实现实时降价预览?

Python 如何在同一文本输入框中实现实时降价预览?,python,pyqt,Python,Pyqt,我正在用QT设计器和Python构建一个记笔记的GUI。我正在设想用简单的标记将笔记保存为*.txt文件。但是,对于GUI,我希望主文本编辑框能够在您处于“编辑模式”并不断键入时实时呈现markdown。因此,如果您键入了*斜体*或**粗体**,文本框将识别此内容,并使用文本中的标记符号将其斜体化或粗体化。一旦你退出“编辑模式”,你会看到一个格式正确的富文本预览,并且没有任何标记符号。如果有人熟悉的话,我很想复制它(值得一提的是这个应用程序,但它的功能不同,它总是处于“实时预览”模式) 我正试图

我正在用QT设计器和Python构建一个记笔记的GUI。我正在设想用简单的标记将笔记保存为*.txt文件。但是,对于GUI,我希望主文本编辑框能够在您处于“编辑模式”并不断键入时实时呈现markdown。因此,如果您键入了
*斜体*
**粗体**
,文本框将识别此内容,并使用文本中的标记符号将其斜体化或粗体化。一旦你退出“编辑模式”,你会看到一个格式正确的富文本预览,并且没有任何标记符号。如果有人熟悉的话,我很想复制它(值得一提的是这个应用程序,但它的功能不同,它总是处于“实时预览”模式)

我正试图弄清楚如何使用QT和Python实现这一点,到目前为止,我所能想到的就是:

  • QT网站上有一个演示使用
    QWebEngineView
    进行实时预览的示例,但它与一个普通文本框并排出现,而不是我所想的

  • 我想知道这是否也可以通过某种语法突出显示来实现?所以从这个意义上说,我应该更多地构建一个代码编辑器或其他什么?因此,QT文本框将被配置(作为富文本或HTML?我不知道),以便在您键入第二个星号时,
    *(斜体文本)*
    的任何实例都将获得斜体格式。我想在语法突出显示定义中,我可以使用某种通配符来表示“这些标记符号之间的任何内容?”


  • 有人对解决方案有什么建议吗?

    因为Qt 5.14 QTextEdit支持降价格式,所以您可以使用2个显示不同编辑模式的QTextEdit。要交换QTextEdit,可以使用QStackedWidget:

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    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)
    
        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())
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
    
        w = MainWindow()
        w.show()
    
        sys.exit(app.exec_())
    

    由于Qt 5.14 QTextEdit支持标记格式,因此可以使用2个显示不同编辑模式的QTextEdit。要交换QTextEdit,可以使用QStackedWidget:

    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    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)
    
        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())
    
    
    if __name__ == "__main__":
        import sys
    
        app = QtWidgets.QApplication(sys.argv)
    
        w = MainWindow()
        w.show()
    
        sys.exit(app.exec_())
    

    嘿,你可以在文本输入中显示html!只需获取输入,用regex查找markdown并用html替换它。希望这有帮助!粗体的正则表达式:
    \*\*(.*?)\*\*
    和斜体:
    \*(.*?)\*
    @Rocket-Nikita-Ah,好的。。。看起来我可以用
    textChanged
    信号监视
    QTextEdit
    小部件,并将其链接到函数。每次有更改时,函数都会像您所说的那样用正则表达式查找标记,然后相应地格式化它。我得再想一想,把我的头绕在它周围,但看起来这是一条路要走。谢谢!我找到了一个叫markdown的模块。你应该试试看!嘿,你可以在文本输入中显示html!只需获取输入,用regex查找markdown并用html替换它。希望这有帮助!粗体的正则表达式:
    \*\*(.*?)\*\*
    和斜体:
    \*(.*?)\*
    @Rocket-Nikita-Ah,好的。。。看起来我可以用
    textChanged
    信号监视
    QTextEdit
    小部件,并将其链接到函数。每次有更改时,函数都会像您所说的那样用正则表达式查找标记,然后相应地格式化它。我得再想一想,把我的头绕在它周围,但看起来这是一条路要走。谢谢!我找到了一个叫markdown的模块。你应该试试看!