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='\n\n'.join(da)
        self.textEdit.setText('\n'+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'),重新运行,输入框还是不能输入中文,不过可以查到中文翻译了:

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

转载于:https://www.cnblogs.com/kongkongyzt/p/3491457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值