当前位置: 首页 > 知识库问答 >
问题:

如何从QPlainTextEdit正确获取Unicode文本输入?[副本]

微生阳平
2023-03-14

仅在运行应用程序时,我在屏幕上的QPlainTextEdit区域获得了正确的结果:

但是当单击按钮开始模拟并使用QPlainTextEdit.toPlainText()恢复输入时,输出无效:

def handle_first_input_text(self):
    textEdit = self.textEditWidget1.toPlainText()
    print( "%s", textEdit )

此外,当试图从图像中检索Deltaδ时,会抛出此错误:

Traceback (most recent call last):
  File "main.py", line 57, in handle_first_input_text
    print( "%s", textEdit )
  File "F:\Python\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u03b4' in position 11: character maps to <undefined>

如何从QPlainTextEdit中正确检索输入?这是错误的最小代码,只需点击Start Simulation并查找控制台输出。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys

from PyQt5 import QtGui
from PyQt5 import QtWidgets

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

def main():
    app = QtWidgets.QApplication(sys.argv)
    programWindow = ProgramWindow()

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


class ProgramWindow(QtWidgets.QMainWindow):

    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setup_main_window()
        self.first_input_text()
        self.set_window_layout()

    def setup_main_window(self):
        self.resize( 800, 600 )
        self.centralwidget = QWidget()
        self.setCentralWidget( self.centralwidget )

    def first_input_text(self):
        self.textEditWidget1 = QPlainTextEdit( self )
        self.startSimulationButton1 = QPushButton( "Start Simulation" )

        self.textEditWidget1.document().setPlainText( " # Writing δ some ç é ã õ")
        self.startSimulationButton1.clicked.connect( self.handle_first_input_text )

        verticalInnerLayout = QVBoxLayout()
        verticalInnerLayout.addWidget( self.startSimulationButton1 )

        horizontalInnerLayout = QHBoxLayout()
        horizontalInnerLayout.addLayout( verticalInnerLayout )
        horizontalInnerLayout.addWidget( self.textEditWidget1 )

        self.groupBox1 = QGroupBox( "First Group" )
        self.groupBox1.setLayout( horizontalInnerLayout )

    def set_window_layout(self):
        main_vertical_layout = QVBoxLayout( self.centralwidget )
        main_vertical_layout.addWidget( self.groupBox1 )

    def handle_first_input_text(self):
        textEdit = self.textEditWidget1.toPlainText()
        print( "%s", textEdit )

if __name__ == "__main__":
    main()

此问题与UnicodeEncodeError不同:“charmap”编解码器无法对字符进行编码

此外,下面这些答案都不是这个问题的答案。

为了解决这个问题,我需要添加

.encode("utf-8").decode('cp1252') 

不仅如此

.encode("utf-8")

这是固定版本:

def handle_first_input_text(self):
    textEdit = self.textEditWidget1.toPlainText().encode("utf-8").decode('cp1252')
    print( "%s", textEdit )

完整代码:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys

from PyQt5 import QtGui
from PyQt5 import QtWidgets

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

def main():
    app = QtWidgets.QApplication(sys.argv)
    programWindow = ProgramWindow()

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


class ProgramWindow(QtWidgets.QMainWindow):

    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setup_main_window()
        self.first_input_text()
        self.set_window_layout()

    def setup_main_window(self):
        self.resize( 800, 600 )
        self.centralwidget = QWidget()
        self.setCentralWidget( self.centralwidget )

    def first_input_text(self):
        self.textEditWidget1 = QPlainTextEdit( self )
        self.startSimulationButton1 = QPushButton( "Start Simulation" )

        self.textEditWidget1.document().setPlainText( " # Writing δ some ç é ã õ")
        self.startSimulationButton1.clicked.connect( self.handle_first_input_text )

        verticalInnerLayout = QVBoxLayout()
        verticalInnerLayout.addWidget( self.startSimulationButton1 )

        horizontalInnerLayout = QHBoxLayout()
        horizontalInnerLayout.addLayout( verticalInnerLayout )
        horizontalInnerLayout.addWidget( self.textEditWidget1 )

        self.groupBox1 = QGroupBox( "First Group" )
        self.groupBox1.setLayout( horizontalInnerLayout )

    def set_window_layout(self):
        main_vertical_layout = QVBoxLayout( self.centralwidget )
        main_vertical_layout.addWidget( self.groupBox1 )

    def handle_first_input_text(self):
        textEdit = self.textEditWidget1.toPlainText().encode("utf-8").decode('cp1252')
        print( "%s", textEdit )

if __name__ == "__main__":
    main()

共有2个答案

张嘉
2023-03-14

handle_first_input_text函数中:

>

  • print("%s",文本编辑)行更改为print("{0: s}"。格式(文本编辑))

    这使用了Python3的。格式Mini语言。链接到文档

    最终代码:

    def handle_first_input_text(self):
            textEdit = self.textEditWidget1.toPlainText()
            print( "{0:s}".format(textEdit))
    

  • 席安康
    2023-03-14

    试试看:

    import sys
    import os
    
    from PyQt5 import QtGui
    from PyQt5 import QtWidgets
    
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    
    def main():
        app = QtWidgets.QApplication(sys.argv)
        programWindow = ProgramWindow()
    
        programWindow.show()
        sys.exit(app.exec_())
    
    
    class ProgramWindow(QtWidgets.QMainWindow):
    
        def __init__(self):
            QtWidgets.QMainWindow.__init__(self)
            self.setup_main_window()
            self.first_input_text()
            self.set_window_layout()
    
        def setup_main_window(self):
            self.resize( 800, 600 )
            self.centralwidget = QWidget()
            self.setCentralWidget( self.centralwidget )
    
        def first_input_text(self):
            self.textEditWidget1 = QPlainTextEdit( self )
            self.startSimulationButton1 = QPushButton( "Start Simulation" )
    
            self.textEditWidget1.document().setPlainText( " # Writing δ some ç é ã õ")
            self.startSimulationButton1.clicked.connect( self.handle_first_input_text )
    
            verticalInnerLayout = QVBoxLayout()
            verticalInnerLayout.addWidget( self.startSimulationButton1 )
    
            horizontalInnerLayout = QHBoxLayout()
            horizontalInnerLayout.addLayout( verticalInnerLayout )
            horizontalInnerLayout.addWidget( self.textEditWidget1 )
    
            self.groupBox1 = QGroupBox( "First Group" )
            self.groupBox1.setLayout( horizontalInnerLayout )
    
        def set_window_layout(self):
            main_vertical_layout = QVBoxLayout( self.centralwidget )
            main_vertical_layout.addWidget( self.groupBox1 )
    
        def handle_first_input_text(self):
            textEdit = self.textEditWidget1.toPlainText()
            #print( "%s" % textEdit)
            os.system('echo ' + textEdit)
    
    if __name__ == "__main__":
        main()
    
     类似资料:
    • 问题内容: 在某些情况下,我必须从标记中获取文本,例如- 输入标签中的文本是一些说 但是当我使用时,它什么也不会返回。 无论如何,我可以从标签中获取文本吗? 问题答案: 您可以使用以下任何一种: 让我知道这是否没有帮助。

    • 所以我的问题很简单。 如何从表单中获取用户输入并将其放入变量中? 我想用香草JS和没有库来做这件事。 多谢了。

    • 我发现其他人也有同样的问题,他们的问题通过在InputStreamReader构造函数中指定UTF-8来解决: 以UTF-8形式读取InputStream 这对我不起作用,我也不知道为什么。无论我尝试什么,我总是得到转义的unicode值(斜杠-U+十六进制),而不是实际的语言字符。我在这里做错了什么?提前道谢! 请注意:这不是字体问题。我之所以知道这一点,是因为如果我对同一个文件使用Resour

    • 我对编程比较陌生,尤其是Python。我被要求创建一个for循环,打印用户给出的10个数字。我知道如何接受输入以及如何创建for循环。困扰我的是,在我的程序中,我依靠用户插入10个数字。我如何让程序控制插入多少数字?这是我尝试的:

    • 问题内容: 如何从用户进行pygame打印输入: 我试图让用户键入一些内容,然后pygame将其打印在屏幕上。 这是我当前的程序: 我想要这样,当用户点击Enter时,它将清空屏幕。 帮我! 问题答案: 这是一个示例脚本,可将输入切换到屏幕。它显示了如何在遍历pygame事件队列时修改字符串。每帧都将清除屏幕,并重建名称表面并使其变白。 这是要点版本

    • 我在使用org.apache.commons.io.FileUtils从img目录删除文件时遇到问题。我正在使用以下代码: 实际上,该代码是用来替换img目录中已有的图像文件。我需要删除所有以前存在的文件,名称是n.*,与新文件,例如n.png。如果我试图删除图像文件,我会得到变量成功的false值,并且文件不会被删除。但不包括图像文件,例如*.abc;*.ACD;*.ACDC等被成功删除。这个问

    • 我不知道如何从文件中获取特定的文本行。假设文本文件是: 文本文件(标记)的第二行怎么弄?我只需要读就行了,不是编辑就行了。

    • 我试图在我的项目中做一些设置。我在将文本文件中的值输入JFrame时遇到问题。更具体地说,我有一个JFrame。从这个JFrame中,我打开另一个名为的JFrame,其中是文本文件中带有值“”的JTextField。当我将值更改为“”并点击保存按钮时,它会将文本文件重写为“”并处理JFrame。直到现在一切都很好。 当我想再次打开JFrame时,它用旧值""打开它。但是当我关闭两个JFrames并