zoukankan      html  css  js  c++  java
  • PyQt5中中文问题的不完全解决

    PyQt5,或者说Qt在Linux下的中文输入总是有问题,要不就是输入法用不了,要不就是中文乱码。我在用PyQt5写翻译词典的时候就遇到了这样的问题,折腾了一下,只解决了一部分的问题。

    按照规矩,先上代码:

    # -*- coding: utf-8 -*-
    from PyQt5 import QtCore, QtGui, QtWidgets
    import urllib2
    import xml.etree.cElementTree as ET
    import sip
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(400, 300)
            self.centralWidget = QtWidgets.QWidget(MainWindow)
            self.centralWidget.setObjectName("centralWidget")
            self.pushButton = QtWidgets.QPushButton(self.centralWidget)
            self.pushButton.setGeometry(QtCore.QRect(70, 210, 80, 23))
            self.pushButton.setObjectName("pushButton")
            self.textEdit = QtWidgets.QTextEdit(self.centralWidget)
            self.textEdit.setGeometry(QtCore.QRect(20, 40, 351, 161))
            self.textEdit.setObjectName("textEdit")
            self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget)
            self.pushButton_2.setGeometry(QtCore.QRect(220, 210, 80, 23))
            self.pushButton_2.setObjectName("pushButton_2")
            self.lineEdit = QtWidgets.QLineEdit(self.centralWidget)
            self.lineEdit.setGeometry(QtCore.QRect(80, 10, 291, 23))
            self.lineEdit.setObjectName("lineEdit")
            self.label = QtWidgets.QLabel(self.centralWidget)
            self.label.setGeometry(QtCore.QRect(20, 10, 51, 21))
            self.label.setObjectName("label")
            MainWindow.setCentralWidget(self.centralWidget)
            self.menuBar = QtWidgets.QMenuBar(MainWindow)
            self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 21))
            self.menuBar.setObjectName("menuBar")
            MainWindow.setMenuBar(self.menuBar)
            self.mainToolBar = QtWidgets.QToolBar(MainWindow)
            self.mainToolBar.setObjectName("mainToolBar")
            MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
            self.statusBar = QtWidgets.QStatusBar(MainWindow)
            self.statusBar.setObjectName("statusBar")
            MainWindow.setStatusBar(self.statusBar)
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "有道小词典"))
            self.pushButton.setText(_translate("MainWindow", "查询"))
            self.pushButton_2.setText(_translate("MainWindow", "退出"))
            self.label.setText(_translate("MainWindow", "单词:"))
        
        def get_result(self):
            url='http://fanyi.youdao.com/openapi.do?keyfrom=isailfish&key=1053023538&type=data&doctype=xml&version=1.1&q='+urllib2.quote(self.lineEdit.text().encode('utf8'))
            data=urllib2.urlopen(url).read()
            root=ET.fromstring(data)
            result1=root[3][1]
            da=[]
            for i in result1:
                da.append(i.text)
            foo='
    
    '.join(da)
            self.textEdit.setText('
    '+foo)
        
        def exit(self):
            exit()
        
        def bindevent(self):
            self.pushButton.clicked.connect(self.get_result)
            self.pushButton_2.clicked.connect(self.exit)
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        ui.bindevent()
        MainWindow.show()
        sys.exit(app.exec_())

    如果你的系统中已经安装了pyqt5,那么运行这段代码应该是没有问题的。会显示出像下面的软件界面:

                

    查英文是没有问题的,但是中文死活输入不了。。。输入不了就算了,我复制一段中文到输入框好了,结果点击“查询”,python shell这头报错了,一看错误,url无法正常解析,print url一看,真是。。。惨不忍睹。

    我通过self.lineedit.text()获取lineedit的文本内容,我想能不能对这个获取的文本内容进行转码呢?如果可以,那么这个方法名字是什么呢?

    于是直接dir(self.lineedit.text())列出所有的方法和属性,终于被我找到了---encode()方法,棒级了,于是果断修改成self.lineedit.text().encoding('utf8'),重新运行,输入框还是不能输入中文,不过可以查到中文翻译了:

    不过输入中文的问题还是很头疼,不知道怎么解决= = 。。。。。。。

  • 相关阅读:
    采用get方式提交数据到服务器实例
    android之HttpURLConnection
    Android中的传感器
    有符号类型无符号类型转换
    一些常用位运算示例
    C++ / CLI 调用 C++ /Native 随记
    Linux Shell Demo
    Linux Shell 脚本入门
    Linux 编译 websocket++
    Linux 编写c++程序之openssl
  • 原文地址:https://www.cnblogs.com/kongkongyzt/p/3491457.html
Copyright © 2011-2022 走看看