博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PyQt5中中文问题的不完全解决
阅读量:5139 次
发布时间:2019-06-13

本文共 3712 字,大约阅读时间需要 12 分钟。

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

按照规矩,先上代码:

# -*- coding: utf-8 -*-from PyQt5 import QtCore, QtGui, QtWidgetsimport urllib2import xml.etree.cElementTree as ETimport sipclass 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

你可能感兴趣的文章
Postman-----如何导入和导出
查看>>
【Linux】ping命令详解
查看>>
8、RDD持久化
查看>>
第二次团队冲刺--2
查看>>
[转载]加密算法库Crypto——nodejs中间件系列
查看>>
使用Xshell密钥认证机制远程登录Linux
查看>>
【模板】最小生成树
查看>>
网络编程
查看>>
java面试题
查看>>
pair的例子
查看>>
uva 387 A Puzzling Problem (回溯)
查看>>
Oracle中包的创建
查看>>
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
构造者模式
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>