自动翻译器2

自动翻译器的qt部分

接下来我们要实现qt窗口部分,这里遇到一个很尴尬的事情,qt for python的开发环境要求按照python,但我安装的是Anaconda,使用Jupyter开发,安完了PySide2,Qt找不到这个模块,用Jupyter呢,又提示找不到qt.qpa.plugin,打开环境变量查看os.environ,

'QT_QPA_PLATFORM_PLUGIN_PATH': 'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\PySide2\\plugins\\platform'platform竟然少个s,我也是醉了,由于不想在py文件追加环境变量配置,我很机智的把文件夹platforms复制了一份,改名platform,这样是不好的,但是好用呀。

  1. 追加main.py文件,导入需要的包
import sys
import random
from PySide2.QtWidgets import QApplication, QWidget, QTextEdit, QHBoxLayout
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile, QDir, QTimer, Slot, Qt
from PySide2.QtGui import QClipboard
from Spider import *

  1. 使用线程创建翻译器
#创建翻译器
class WorkerThread(QThread):
    resultReady = Signal()
    def __init__(self):
        super().__init__()

    def __del__(self):
        pass

    def run(self):
        global translation
        translation = Translation()
        self.resultReady.emit()
  1. 翻译过程也使用线程
#翻译线程
class WorkerThreadTrans(QThread):
    resultReady = Signal(str)
    def __init__(self):
        super().__init__()
        self.last = ''

    def setText(self, value):
        self.value = value

    def run(self):
        self.result = ''
        while(1):
            self.getClipborad()
            time.sleep(1)

    @Slot()
    def getClipborad(self):
        global translation
        board = QApplication.clipboard()
        self.str = board.text()
        if self.str == '' or self.str == self.last:
            pass
        else:
            try:
                self.last = self.str
                self.result = translation.translate(self.str)
            except:
                pass
            finally:
                pass
            self.resultReady.emit(self.result)
  1. 实现窗口类
#窗口
class Form(QWidget):
    def __init__(self):
        super().__init__()
        
        self.textEdit = QTextEdit()
        self.layout = QHBoxLayout()
        self.layout.addWidget(self.textEdit)
        self.setLayout(self.layout)
        
        self.setWindowTitle("百度翻译器")
        self.resize(400, 300)
        self.setWindowFlags(Qt.WindowStaysOnTopHint)
        self.icon = QIcon()
        self.icon.addPixmap(QPixmap('favicon.ico'), QIcon.Normal, QIcon.Off)
        self.setWindowIcon(self.icon)

        self.create = False

        self.thread = WorkerThread()
        self.thread.finished.connect(self.thread.deleteLater)
        self.thread.resultReady.connect(self.createTrans)
        self.thread.start()

        self.threadTrans = WorkerThreadTrans()
        self.threadTrans.finished.connect(self.threadTrans.deleteLater)
        self.threadTrans.resultReady.connect(self.setTextValue)

        
    def __del__(self):
        self.threadTrans.quit()
        self.threadTrans.wait()
        if self.create:
            del translation
    
    @Slot()
    def createTrans(self):
        self.create = True
        self.threadTrans.start()

    @Slot()
    def setTextValue(self, value):
        self.textEdit.setPlainText(value)
  1. main
if __name__ == "__main__":
    app = QApplication(sys.argv)
    
    translation = None

    window = Form()
    window.show()

    sys.exit(app.exec_())

为了防止窗口启动卡顿,运行卡顿,我们开辟了两个线程。我们还把窗口置顶,为窗口设置了图标。我们重载了窗口关闭事件,用于把线程关闭。

  1. 程序运行效果
    1564980342307.png

  2. 打包

具体打包操作请看帖子 https://www.jianshu.com/p/046e690c0f12

打包命令

pyinstaller -F -w -i favicon.ico --icon=favicon.ico main.py -p C:\ProgramData\Anaconda3\Lib\site-packages\PySide2

为了平台显示我们把C:\ProgramData\Anaconda3\Lib\site-packages\PySide2\plugins\platforms\qwindows.dll也拷贝过来
1564993349890.png

  1. 去除selenium隐藏控制台解决办法

参考帖子 https://www.cnblogs.com/TurboWay/p/9300105.html

修改C:\ProgramData\Anaconda3\Lib\site-packages\selenium\webdriver\common\service.py源码

  1. 程序地址

热门文章

暂无图片
编程学习 ·

Unity2D教程:菜单界面、文字设置、常用界面功能

菜单界面创建一个UI-Image,会自动生成Canvas。 设置Canvas的设置模式为随屏幕改变 设置Image的伸展模式,在这个界面按下Alt键会变成这样,选择右下角那个就是填充整个Canvas了在当前Image下创建Button,将Button下面的Text和Button自身都弄成预置物Text可以加一个Outline组件…
暂无图片
编程学习 ·

C++核心准则ES.40:避免复杂的表达式

ES.40: Avoid complicated expressionsES.40:避免复杂的表达式Reason(原因)Complicated expressions are error-prone.复杂的表达式容易引发错误。Example(示例)// bad: assignment hidden in subexpression while ((c = getc()) != -1)// bad: two non-local variables as…
暂无图片
编程学习 ·

CnPlugin是PL/SQL Developer工具插件使用

CnPlugin是PL/SQL Developer工具插件,支持PL/SQL Developer 7.0以上版本。1、安装2、拷贝文件安装结束后,得到一个 CnPlugin.dll 和 “CnPlugin”的文件夹,把这两个拷贝到 PL/SQL Developer的安装路径下的 “PlugIns”目录下,重启PL/SQL Develop可以使用了,打开的时候 会在…
暂无图片
编程学习 ·

OpenCV的初步解读

OpenCV的初步解读图像读取:cv2.imread(path,flag)`` flag:如何读取图片:cv2.IMREAD_COLOR:读取彩色图像。图像的透明度会被忽略(默认参数)。 cv2.IMREAD_GRAYSCALE:读取灰度图像。 flag=-1, 8位深度,原通道 flag=0, 8位深度 1通道 flag=1, 8位…
暂无图片
编程学习 ·

如何用Nearby Service开发针对附近人群的精准广告推送功能

当你想找一家餐厅吃饭,却不知道去哪家,这时候手机跳出一条通知,为你自动推送附近优质餐厅的信息,你会点击查看吗?当你还在店内纠结于是否买下一双球鞋时,手机应用给了你发放了老顾客5折优惠券,这样的广告你有拒绝的理由吗?这样的广告不仅不会引起用户的厌烦,还满足了用…
暂无图片
编程学习 ·

Spring Boot / Spirng Cloud 引入Rabbit MQ

注意: spring cloud版本:Greenwich.RELEASE spring boot 版本: 2.1.5.RELEASE 1.导包,在pom.xml中导入<dependency><groupId>org.springframework.amqp</groupId><artifactId>spring-rabbit</artifactId></dependency>2.加入配置文件 …
暂无图片
编程学习 ·

双亲委派模型

原理 双亲委派模式是在Java 1.2后引入的,其工作原理的是,如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加…
暂无图片
编程学习 ·

c++ string操作

c++ string操作 #include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std;void test01() {///*string& operator=(const char* s)* string& operator=(const string &s)* string& operato…
暂无图片
编程学习 ·

V2Pro春季班普遍学撑了,秋季班7月报名你还敢来么

今年V2春季班开班以后,同学们的学习信心保持着高涨,一直维持到了课程结业。今年春季班课程学习的进度在V2.1模块结束以后,我们开始推出了当时号称“加量不加价”的V2Pro增量课程,从DVT Eclipse工具的使用、覆盖率驱动验证管理流程、TBA测试平台自动化初级应用、寄存器一致性…
暂无图片
编程学习 ·

C#判断端口是否被占用

public static bool PortInUse(int port){bool inUse = false;IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties();IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners();//IP端口foreach (IPEndPoint endPoint in ipEndPoints){if (…
暂无图片
编程学习 ·

nginx从下载到部署全过程(Linux)

导航NGINX官网下载NGINX安装环境解压,编译,安装启动及测试NGINX官网以下列举了三个网址,分别是:NGINX官网,下载网址及官方文档。官方网站:http://nginx.org/下载网址:http://nginx.org/en/download.html官方文档:http://nginx.org/en/docs/ 下载NGINX 通过官方下载地址…
暂无图片
编程学习 ·

现代开发者必备:5个更流畅、更受欢迎的Python web框架

全文共1837字,预计学习时长9分钟图源:unsplash如今,可供选择的Python web框架有不少,能帮助你更快更轻松地创建web应用。本文就将为大家介绍一些更现代、使用更广泛的web框架。1.FastAPIFastAPI致力于实现轻便和快速,笔者很喜欢它,它的开发速度和简单程度令人欣慰。这对于…
暂无图片
编程学习 ·

解决Docker无法停止的方法

导读在本篇文章里小编给大家整理了关于docker容器无法stop的解决办法,有需要的朋友们可以参考下。解决方法如下:1、强制删除容器docker rm -f jenkins2、清理此容器的网络占用docker network disconnect --force bridge jenkins docker 无法stop,kill容器最近在遇到docker无…
暂无图片
编程学习 ·

Spring-boot 使用undertow代替tomcat

Undertow是Red Hat公司的开源产品, 是一款灵活的高性能Web服务器,它完全采用Java语言开发,可以直接嵌入到Java项目中使用,支持阻塞IO和非阻塞IO。由于Undertow采用Java语言开发。 Undertow在高并发业务场景中,性能优于Tomcat,对于并发要求不高的情况下,二者差别不大。 Un…
暂无图片
编程学习 ·

windows10系统-2-安装Nodejs及SocketIO

(1)双击node-v12.14.1-x64.msi CMD>npm --version查看npm的版本 CMD>npm -v (2)使用淘宝镜像的命令 CMD>npm install -g cnpm --registry=https://registry.npm.taobao.org CMD>npm list -g查看所有全局安装的模块 【全局安装所在路径C:\Users\user\AppData\Roamin…
暂无图片
编程学习 ·

LeetCode刷题之动态规划的解题方法及相关练习

从集合的角度来考虑DP问题,用某一个数来代表一类数线性DP: 快乐的LeetCode — 53.最大子序和快乐的LeetCode — 120. 三角形最小路径和多口味LeetCode — 63. 不同路径 II多味的LeetCode — 91. 解码方法区间DP问题 多味的LeetCode — 198. 打家劫舍多味的LeetCode — 300. 最…
暂无图片
编程学习 ·

《advanced FPGA designed》ch7 example design:I2S versus SPDIF

七章:示例:I2S与SPDIFI2S格式以源同步的方式传输192 kHz采样率的音频数据。数据的样本大小可以是16位到24位,并且无论样本大小如何,都将其标准化为满量程幅度。由于信号是与源时钟一起发送的,因此可以使用源时钟轻松重建数据并随后进行重新同步。7.1总述I2S时序。7.1.1代码分…