zoukankan      html  css  js  c++  java
  • python网页抓取之自己动手写字典

      由于上篇的是在命令行中获取翻译的,方便性肯定一般啦。最多算个

    好玩些罢了。周末没事,就把上篇的代码搬进基于pyqt4中的图形软件中了。

       上篇代码当作模块使用不方便,做了更改,另外,两点注意:

    1.qt支持html的标签对于字符串的修饰。

    比如:<font color="red">string</font> 显示的是红色的string。

    2.存储在数据库中存储翻译时使用的' '换行符如果使用标签修饰就会失效,

    只能在存储时换成<br>来分割不同的翻译,当然如果你不用这种方法显示

    字符串就不需要考虑<br>了,下图字符串是用标签修饰后的效果。

     本人自己的电脑装的是linux mint,默认窗体就是这个样子,透明度是0.9。

    OK按钮翻译输入框的单词(快捷键回车),clip按钮翻译剪切板的单词(快捷键

    是shift),如果不是单词,程序会过滤掉。

      鼠标离开主窗体(快捷键alt可以直接隐藏主窗体)仅显示:

      

    双击它唤出主窗体(快捷键:x)。

    实现的窗体代码如下,获取翻译模块部分可以去:

    https://github.com/915546302/dictionary

      1 #!/usr/bin/python
      2 #--*--coding:utf-8--*--
      3 
      4 import sys,re
      5 from PyQt4 import QtGui
      6 from PyQt4 import QtCore
      7 from dic import Fecth
      8 import time
      9 class IrregularForm(QtGui.QWidget): 
     10         def __init__(self, parent=None):
     11             QtGui.QWidget.__init__(self, parent)
     12             self.parent=parent
     13 
     14             mask=QtGui.QPixmap("./icons/search40.png")
     15             self.setMask(QtGui.QBitmap(mask.mask()))
     16             p=QtGui.QPalette()
     17             p.setBrush(QtGui.QPalette.Window, QtGui.QBrush(mask))
     18             self.setPalette(p)
     19             self.setGeometry(100, 100, 100, 100)
     20             self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
     21             self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
     22             self.setWindowIcon(QtGui.QIcon('./icons/search50.png'))
     23             self.mouseMovePos = QtCore.QPoint(0, 0)
     24         def mouseMoveEvent(self,event):
     25              if(self.mouseMovePos != QtCore.QPoint(0, 0)):
     26                 self.move(self.geometry().x() + event.globalPos().x() 
     27                     - self.mouseMovePos.x(),self.geometry().y() 
     28                     + event.globalPos().y() - self.mouseMovePos.y())
     29                 self.mouseMovePos = event.globalPos()
     30         def mousePressEvent(self,event):
     31             self.mouseMovePos = event.globalPos()
     32 
     33         def mouseReleaseEvent(self,event):
     34             self.mouseMovePos = QtCore.QPoint(0, 0)
     35         def mouseDoubleClickEvent(self, event):
     36             self.emit(QtCore.SIGNAL('trueVisible()'))
     37         def keyPressEvent(self, event):
     38             if event.key() == QtCore.Qt.Key_X:
     39                 self.emit(QtCore.SIGNAL('trueVisible()'))
     40 class Dic(QtGui.QWidget):
     41     def __init__(self, parent=None):
     42         QtGui.QWidget.__init__(self, parent)
     43         self.alt=None
     44         self.irregular=IrregularForm()
     45         self.irregular.show() 
     46  
     47         self.curTime=time.strftime("%Y-%m-%d %H:%M", 
     48             time.localtime(time.time()))
     49         okButton = QtGui.QPushButton("OK")
     50         cbbtn = QtGui.QPushButton("clip")
     51 
     52         self.edit = QtGui.QLineEdit()
     53         self.word = QtGui.QLabel( self.curTime)
     54         rem = QtGui.QLabel('<h2><i>Word:</i></h2>')
     55         self.edit.setStyleSheet("color: blue;" 
     56                          "selection-color: yellow;" 
     57                          "selection-background-color: blue;")
     58         #cbbtn.setStyleSheet("color:red");
     59         cbbtn.setStyleSheet("color: blue;border:2px groove gray;"
     60                           "border-radius:10px;padding:2px 4px;")
     61         okButton.setStyleSheet("border:2px groove gray;"
     62                           "border-radius:10px;padding:2px 4px;")
     63 
     64         hbox = QtGui.QHBoxLayout()
     65         hbox.addWidget(rem)
     66         hbox.addWidget(self.edit)
     67         hbox.addWidget(okButton)
     68         hbox.addWidget(cbbtn)
     69 
     70         vbox = QtGui.QVBoxLayout()
     71         vbox.addLayout(hbox)
     72         vbox.addWidget(self.word)
     73         
     74         self.setLayout(vbox)
     75         self.setWindowOpacity(0.95)
     76         self.setWindowTitle('Dictionary')
     77         self.setGeometry(300, 300, 350, 150)
     78         self.setWindowIcon(QtGui.QIcon('./icons/search50.png'))
     79         self.connect(okButton, QtCore.SIGNAL('clicked()'), 
     80             self.okButton)
     81         self.connect(cbbtn, QtCore.SIGNAL('clicked()'), 
     82             self.clipboardBotton)
     83         self.connect(self.irregular, QtCore.SIGNAL('trueVisible()'), 
     84             self,QtCore.SLOT('trueVisible()') )
     85         #self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
     86         self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
     87         #self.fe=Fecth()
     88     @QtCore.pyqtSlot()
     89     def trueVisible(self):
     90         self.setVisible(True)
     91         self.irregular.setVisible(False)
     92 
     93     def clipboardBotton(self):
     94         clipboard = QtGui.QApplication.clipboard()
     95         print clipboard.text()
     96         self.edit.setText(clipboard.text())
     97         self.buttonClicked(clipboard.text())
     98     def okButton(self):
     99         src=self.edit.text()
    100         self.buttonClicked(src)
    101     def setColor(self,string,key):
    102         if key=='red':
    103             return '<font color="red">'+string+'</font>'+'<br>'
    104         elif key=='blue':
    105             return '<font color="blue">'+string+'</font>'+'<br>'
    106         else:
    107             return '<font color="green">'+string+'</font>'+'<br>'
    108     def buttonClicked(self,src):
    109 
    110         g=re.match('[a-zA-Z]+',src)
    111         if not g:
    112             self.word.setText(self.setColor('<h3>Not a word!</h3>','red'))
    113             return
    114         src=g.group()
    115         self.fe=Fecth()
    116         rows=self.fe.searchDB(src,None)
    117         trans=''
    118         if rows:
    119             for row in rows:
    120                 trans = self.setColor(row[0],'red')
    121                 if row[1]!='':
    122                    trans+=self.setColor(row[1]+','+row[2],'blue')
    123                 trans+= self.setColor(row[3],'green')
    124             self.word.setText('<h3>'+trans+'</h3>')
    125         else:
    126             
    127             trans=self.setColor(src,'red')
    128             zh=self.fe.fecth('qt')
    129             print zh[0],zh[1]
    130             trans+=self.setColor(zh[0],'blue')
    131             tmp=zh[1]
    132             if tmp=='':
    133                 tmp='<b>Fetch fail!</b>'
    134             trans+= self.setColor(tmp,'green')
    135             self.word.setText('<h3>'+trans+'</h3>')
    136         self.fe.close()
    137     def keyReleaseEvent(self, event):
    138             
    139             if event.key() == QtCore.Qt.Key_Return:
    140                 self.okButton()
    141             elif event.key() == QtCore.Qt.Key_Shift:
    142                 self.clipboardBotton()
    143             elif event.key() == QtCore.Qt.Key_Alt:
    144                 self.alt=QtCore.Qt.Key_Alt
    145                 self.setVisible(False)
    146                 self.irregular.setVisible(True)
    147             elif event.key() == QtCore.Qt.Key_Space:
    148                 self.edit.setText('')
    149     def closeEvent(self, event):
    150         
    151         QtGui.qApp.quit()
    152         #self.irregular.destroy()
    153     def leaveEvent(self,evt): 
    154         if self.alt==QtCore.Qt.Key_Alt:
    155             self.alt=-1
    156             return
    157         cx,cy=QtGui.QCursor.pos().x(),QtGui.QCursor.pos().y()
    158         if(cx >= self.x() and cx <= self.x()+self.width()
    159             and cy >= self.y() and cy <=self.y()+self.height()):
    160             pass
    161         else:
    162             
    163             self.irregular.setVisible(True)
    164             self.setVisible(False)
    165             #self.setWindowOpacity(0.3)
    166 
    167 app = QtGui.QApplication(sys.argv)
    168 dic = Dic()
    169 dic.show()
    170 sys.exit(app.exec_())
    View Code

      更详细的内容可以去github上了解,代码很多需要优化,很多本人不满意的地方,

    应该重新架构一下。

      可以根据自己的喜好设置窗体的显示和热键啦,代码作为例子分享下,

    随便修改,如果能共同开发出在linux下不错的翻译软件那就更好了,^_^。

  • 相关阅读:
    使用ECMAScript 6 模块封装代码
    JavaScript生成一个不重复的ID
    利用setenv进行tomcat 内存设置
    使用Nginx、Nginx Plus防止服务器DDoS攻击
    【Nginx】实现负载均衡的几种方式
    一台Linux服务器可以负载多少个连接?
    Linux配置使用SSH Key登录并禁用root密码登录
    Spring JPA事务
    使用SVN钩子强制提交日志和限制提交文件类型
    RabbitMQ 初学及其深入学习推荐的一些文章
  • 原文地址:https://www.cnblogs.com/wuchaofan/p/3405047.html
Copyright © 2011-2022 走看看