鱼C论坛

 找回密码
 立即注册
查看: 2959|回复: 3

[原创] 用QT写了个桌面字典,分享点思路,大神绕道

[复制链接]
发表于 2016-9-21 09:04:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
最近在实验楼参加了一个训练营,其中第三个项目就是利用有道翻译接口开发一个可视化划词翻译的小程序,但实验楼是运用Pygtk框架开发的,我用惯了拖控件的开发形式,一时之间还是没法接受,纯手写UI,感觉思路好乱,于是乎我决定使用QT作为UI的展示.....这仅仅是一个小小的部分,没啥技术可言,所以大牛还请绕道!
1474391492276.png
实验目标:通过爬取有道翻译接口,进行交互,并实现划词翻译功能 完成进度:目前已实现大部分功能,通过模拟浏览器取得翻译结果,并通过基于QT框架展示的效果! 由于刚接触QT,难免会碰到歪路,目前的展示功能有:1,翻译结果 2.百科 3.词条功能

以下是爬虫代码部分:

  1. #coding:utf-8
  2. import requests,urllib
  3. from bs4 import BeautifulSoup
  4. def request(arg):
  5.     youdao_url = 'http://www.youdao.com/w/%s/#keyfrom=dict2.top'% arg
  6.     Referer = 'http://www.youdao.com/w/%s/'%urllib.parse.quote(arg)
  7.     print(Referer)
  8.     herders = {
  9.     'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
  10.     'Accept-Encoding':'gzip, deflate, sdch',
  11.     'Connection':'keep-alive',
  12.     'Host':'www.youdao.com',
  13.     'Referer':Referer,
  14.     'Upgrade-Insecure-Requests':'1',
  15.     'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
  16.     }
  17.     session = requests.session()
  18.     get_youdao = session.get(youdao_url,headers = herders)
  19.     soup = BeautifulSoup(get_youdao.text,'lxml')
  20.     jieguo = []
  21.     baike = []
  22.     youmei = []
  23.     jieguo_temp = ''
  24.     baike_temp = ''
  25.     youmei_temp = ''
  26.     for i in soup.select('#results-contents'):
  27.         #print(i.select('.trans-container')[0].text.strip('\n').split())
  28.         #print(i.select('#webTrans')[0].text)
  29.         #print(i.select('#examples')[0].text)
  30.         try:
  31.             jieguo.append(i.select('.trans-container')[0].text)
  32.             baike.append(i.select('#webTrans')[0].text)
  33.             youmei.append( i.select('#examples')[0].text)
  34.         except IndexError:
  35.             baike.append(['噢恼,该词汇或句子未被本百科收录!','抱歉啦,当前词条搜索为空。'])
  36.             youmei.append(['噢恼,该词汇或句子未被本百科收录!', '抱歉啦,当前词条搜索为空。'])
  37.     for i in jieguo:
  38.         jieguo_temp = ''.join(i)
  39.         for j in baike:
  40.             baike_temp = ''.join(j)
  41.             for x in youmei:
  42.                 youmei_temp = ''.join(x)
  43.     print(jieguo)
  44.     return jieguo_temp,baike_temp,youmei_temp
复制代码


以下是UI代码 - 基于QT设计器生成:
  1. from PyQt5 import QtCore, QtGui, QtWidgets
  2. from translation import *
  3. class Ui_MainWindow(object):
  4.     def setupUi(self, MainWindow):
  5.         MainWindow.setObjectName("MainWindow")
  6.         MainWindow.resize(1115, 875)
  7.         self.centralwidget = QtWidgets.QWidget(MainWindow)
  8.         self.centralwidget.setObjectName("centralwidget")
  9.         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
  10.         self.pushButton.setGeometry(QtCore.QRect(1040, 30, 71, 31))
  11.         self.pushButton.setObjectName("pushButton")
  12.         self.lineEdit_shuru = QtWidgets.QLineEdit(self.centralwidget)
  13.         self.lineEdit_shuru.setGeometry(QtCore.QRect(10, 30, 1021, 31))
  14.         self.lineEdit_shuru.setObjectName("lineEdit_shuru")
  15.         self.label = QtWidgets.QLabel(self.centralwidget)
  16.         self.label.setGeometry(QtCore.QRect(10, 10, 1101, 16))
  17.         font = QtGui.QFont()
  18.         font.setFamily("黑体")
  19.         font.setPointSize(14)
  20.         self.label.setFont(font)
  21.         self.label.setAcceptDrops(False)
  22.         self.label.setLayoutDirection(QtCore.Qt.RightToLeft)
  23.         self.label.setTextFormat(QtCore.Qt.PlainText)
  24.         self.label.setObjectName("label")
  25.         self.textEdit_baike = QtWidgets.QTextEdit(self.centralwidget)
  26.         self.textEdit_baike.setGeometry(QtCore.QRect(10, 260, 1101, 241))
  27.         self.textEdit_baike.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ArrowCursor))
  28.         self.textEdit_baike.setReadOnly(True)
  29.         self.textEdit_baike.setObjectName("textEdit_baike")
  30.         self.lineEdit_jieguo = QtWidgets.QLineEdit(self.centralwidget)
  31.         self.lineEdit_jieguo.setGeometry(QtCore.QRect(10, 100, 1101, 111))
  32.         self.lineEdit_jieguo.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
  33.         self.lineEdit_jieguo.setText("")
  34.         self.lineEdit_jieguo.setEchoMode(QtWidgets.QLineEdit.Normal)
  35.         self.lineEdit_jieguo.setCursorPosition(0)
  36.         self.lineEdit_jieguo.setReadOnly(True)
  37.         self.lineEdit_jieguo.setObjectName("lineEdit_jieguo")
  38.         self.label_2 = QtWidgets.QLabel(self.centralwidget)
  39.         self.label_2.setGeometry(QtCore.QRect(10, 70, 1101, 16))
  40.         font = QtGui.QFont()
  41.         font.setFamily("黑体")
  42.         font.setPointSize(14)
  43.         self.label_2.setFont(font)
  44.         self.label_2.setAcceptDrops(False)
  45.         self.label_2.setLayoutDirection(QtCore.Qt.RightToLeft)
  46.         self.label_2.setTextFormat(QtCore.Qt.PlainText)
  47.         self.label_2.setObjectName("label_2")
  48.         self.label_3 = QtWidgets.QLabel(self.centralwidget)
  49.         self.label_3.setGeometry(QtCore.QRect(10, 230, 1101, 16))
  50.         font = QtGui.QFont()
  51.         font.setFamily("黑体")
  52.         font.setPointSize(14)
  53.         self.label_3.setFont(font)
  54.         self.label_3.setAcceptDrops(False)
  55.         self.label_3.setLayoutDirection(QtCore.Qt.RightToLeft)
  56.         self.label_3.setTextFormat(QtCore.Qt.PlainText)
  57.         self.label_3.setObjectName("label_3")
  58.         self.textEdit_youmei = QtWidgets.QTextEdit(self.centralwidget)
  59.         self.textEdit_youmei.setGeometry(QtCore.QRect(10, 550, 1101, 241))
  60.         self.textEdit_youmei.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.ArrowCursor))
  61.         self.textEdit_youmei.setReadOnly(True)
  62.         self.textEdit_youmei.setObjectName("textEdit_youmei")
  63.         self.label_4 = QtWidgets.QLabel(self.centralwidget)
  64.         self.label_4.setGeometry(QtCore.QRect(10, 520, 1101, 16))
  65.         font = QtGui.QFont()
  66.         font.setFamily("黑体")
  67.         font.setPointSize(14)
  68.         self.label_4.setFont(font)
  69.         self.label_4.setAcceptDrops(False)
  70.         self.label_4.setLayoutDirection(QtCore.Qt.RightToLeft)
  71.         self.label_4.setTextFormat(QtCore.Qt.PlainText)
  72.         self.label_4.setObjectName("label_4")
  73.         self.label_5 = QtWidgets.QLabel(self.centralwidget)
  74.         self.label_5.setGeometry(QtCore.QRect(510, 800, 161, 16))
  75.         self.label_5.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
  76.         self.label_5.setObjectName("label_5")
  77.         MainWindow.setCentralWidget(self.centralwidget)
  78.         self.menubar = QtWidgets.QMenuBar(MainWindow)
  79.         self.menubar.setGeometry(QtCore.QRect(0, 0, 1115, 23))
  80.         self.menubar.setObjectName("menubar")
  81.         MainWindow.setMenuBar(self.menubar)
  82.         self.statusbar = QtWidgets.QStatusBar(MainWindow)
  83.         self.statusbar.setObjectName("statusbar")
  84.         MainWindow.setStatusBar(self.statusbar)

  85.         self.retranslateUi(MainWindow)
  86.         self.pushButton.clicked.connect(self.translation)
  87.         QtCore.QMetaObject.connectSlotsByName(MainWindow)

  88.     def translation(self):
  89.         self.textEdit_baike.clear()
  90.         self.textEdit_youmei.clear()
  91.         self.lineEdit_jieguo.clear()
  92.         self.soup = self.lineEdit_shuru.text()
  93.         get_soup = request(self.soup)
  94.         jieguo,baike,youmei = get_soup
  95.         self.lineEdit_jieguo.setText(jieguo)
  96.         self.textEdit_baike.append(baike)
  97.         self.textEdit_youmei.append(youmei)





  98.     def retranslateUi(self, MainWindow):
  99.         _translate = QtCore.QCoreApplication.translate
  100.         MainWindow.setWindowTitle(_translate("MainWindow", "Easy dictionary"))
  101.         self.pushButton.setText(_translate("MainWindow", "翻译"))
  102.         self.label.setText(_translate("MainWindow", "                                 欢迎使用简易在线桌面词典,划词翻译更轻松!"))
  103.         self.label_2.setText(_translate("MainWindow", "机器翻译结果:"))
  104.         self.label_3.setText(_translate("MainWindow", "百科科普:"))
  105.         self.label_4.setText(_translate("MainWindow", "优美词条:"))
  106.         self.label_5.setText(_translate("MainWindow", "BY:NarutoLee"))
复制代码


调用窗口代码:
  1. #coding:utf-8
  2. import sys
  3. import fanyi
  4. from PyQt5.QtWidgets import QApplication,QMainWindow

  5. if __name__=="__main__":
  6.     app = QApplication(sys.argv)
  7.     MainWindow = QMainWindow()

  8.     ui = fanyi.Ui_MainWindow()
  9.     ui.setupUi(MainWindow)
  10.     MainWindow.show()
  11.     sys.exit(app.exec_())
复制代码


最后,我想说....关于QT方面的资料真的是太少了,不知这里有没有学习QT的朋友,如果您有好的学习资料,求共享,哈哈!

评分

参与人数 2荣誉 +10 鱼币 +10 贡献 +5 收起 理由
康小泡 + 5 + 5 + 5 热爱鱼C^_^
小人 + 5 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-21 16:57:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-22 21:30:14 | 显示全部楼层
版主是大神,表示没学UI
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-24 15:40:53 | 显示全部楼层
表示 只能膜拜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 13:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表