最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PyQt5制作一個(gè)截圖翻譯工具

 更新時(shí)間:2022年05月31日 10:33:24   作者:Hp_mzx  
這篇文章主要為大家介紹了如何利用PyQt5制作一個(gè)簡(jiǎn)單的截圖翻譯工具,具有截圖功能、翻譯功能和文字識(shí)別OCR,需要的可以參考一下

功能介紹

1.翻譯功能

2.截圖功能(快捷鍵 + 截圖存儲(chǔ)到剪切板中)

3.文字識(shí)別OCR(基于百度API的文字識(shí)別)

UI 界面

截圖

截圖可以使用第三方截圖 或 使用PyQt5截圖

此文章使用PyQt5的截圖

class Snipper(QtWidgets.QWidget):
    def __init__(self, parent=None, flags=Qt.WindowFlags()):
        super().__init__(parent=parent, flags=flags)

        self.setWindowTitle("TextShot")
        self.setWindowFlags(  # 設(shè)置窗口屬性,窗口置頂
            Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint | Qt.Dialog
        )

        self.setWindowState(self.windowState() | Qt.WindowFullScreen)
        self.screen = QtGui.QScreen.grabWindow(
            QtWidgets.QApplication.primaryScreen(),    # 獲取當(dāng)前屏幕分辨率(屏幕大?。?
            QtWidgets.QApplication.desktop().winId(),
        )
        palette = QtGui.QPalette()  # 調(diào)色板QPalette類
        palette.setBrush(self.backgroundRole(), QtGui.QBrush(self.screen))
        self.setPalette(palette)
        # 改變鼠標(biāo)形狀
        QtWidgets.QApplication.setOverrideCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
        self.start, self.end = QtCore.QPoint(), QtCore.QPoint()

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Escape:
            QtWidgets.QApplication.quit()
        return super().keyPressEvent(event)

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.setPen(Qt.NoPen)
        painter.setBrush(QtGui.QColor(0, 0, 0, 100))
        painter.drawRect(0, 0, self.width(), self.height())

        if self.start == self.end:
            return super().paintEvent(event)

        painter.setPen(QtGui.QPen(QtGui.QColor(255, 255, 255), 3))
        painter.setBrush(painter.background())
        painter.drawRect(QtCore.QRect(self.start, self.end))
        return super().paintEvent(event)

    def mousePressEvent(self, event):
        self.start = self.end = QtGui.QCursor.pos()
        self.update()
        return super().mousePressEvent(event)

    def mouseMoveEvent(self, event):
        self.end = QtGui.QCursor.pos()
        self.update()
        return super().mousePressEvent(event)

    def mouseReleaseEvent(self, event):
        if self.start == self.end:
            return super().mouseReleaseEvent(event)
        self.hide()
        QtWidgets.QApplication.processEvents()
        if self.start.x() < self.end.x():
            shot = self.screen.copy(QtCore.QRect(self.start, self.end))
        else:
            shot = self.screen.copy(QtCore.QRect(self.end, self.start))
        QtWidgets.QApplication.quit()

翻譯

翻譯功能可以請(qǐng)求百度翻譯或者有道翻譯,網(wǎng)上有很多這里就不多贅述。

文字識(shí)別

文字識(shí)別本文字使用的百度云的文字識(shí)別OCR 百度云文字識(shí)別

全局熱鍵(快捷鍵)

開啟多線程捕獲全局全局熱鍵,防止主線程阻塞導(dǎo)致假死。

安裝

pip install system_hotkey

示例

from system_hotkey import SystemHotkey
from PyQt5.QtCore import QObject, pyqtSignal, Qt

class HotKeyThread(QObject):
    trigger = pyqtSignal(str)
    def __init__(self):
        super().__init__()
        # 1. 自定義熱鍵響應(yīng)
        self.trigger.connect(self.hotKeyEvent)
        # 2.初始化熱鍵
        self.hot_key = SystemHotkey()
        # 3.綁定快捷鍵發(fā)送信號(hào)
        self.hot_key.register(('control','1'),, callback=lambda x: self.sendKeyEvent("按下"))
    def sendKeyEvent(self,data):
        self.trigger.emit(data)
    def hotKeyEvent(self,data):
        print("接收信號(hào):{}".format(data))

托盤管理

托盤管理使用pyqt5的 QSystemTrayIcon 實(shí)現(xiàn)

class Tray(QSystemTrayIcon):
    def __init__(self, UI):
        super(Tray, self).__init__()
        self.ui = UI
        self.setIcon(QIcon('icons/1.ico'))        # 托盤圖標(biāo)
        self.setToolTip('小工具') # 鼠標(biāo)移動(dòng)到托盤圖標(biāo)上的提示
        self.activated.connect(self.clickedIcon)  # 點(diǎn)擊信號(hào)
        self.menu()
        self.show()
    def clickedIcon(self,reason):
        # reason:鼠標(biāo)點(diǎn)擊托盤圖標(biāo)時(shí)傳遞的整數(shù)型信號(hào)
        # 1表示單擊右鍵
        # 2表示雙擊左鍵
        # 3表示單擊左鍵
        # 4表示點(diǎn)擊中鍵
        # 下面定義單擊左鍵是彈出或隱藏界面,單擊右鍵是彈出菜單。
        if reason == 3:
            self.trayClickedEvent()
        elif reason == 1:
            self.contextMenu()
    def menu(self):
        menu = QMenu()
        action = QAction('退出', self, triggered=self.triggered)
        menu.addAction(action)
        self.setContextMenu(menu)
    def trayClickedEvent(self):
        if self.ui.isHidden():
            self.ui.setHidden(False)
            if self.ui.windowState() == Qt.WindowMinimized:
                self.ui.showNormal()  # 正常顯示窗口
            self.ui.raise_()  # 控制在上層
            self.ui.activateWindow()  # 活動(dòng)窗口
        else:
            self.ui.setHidden(True)  # 設(shè)置隱藏窗口
    def triggered(self):
        self.deleteLater()  # 刪除托盤圖標(biāo),無此操作的話,程序退出后托盤圖標(biāo)不會(huì)自動(dòng)清除
        qApp.quit()         # 會(huì)重寫closeEvent,換一個(gè)退出程序的命令

主代碼

import sys
import time
from tray import Tray
from ui import Ui_MainWindow
from demo import translate,Child_Dialog

from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QThread,pyqtSignal,Qt
from PyQt5.QtWidgets import QApplication,QSystemTrayIcon,QMenu,QAction,qApp


class HotKeyThread(QThread,SystemHotkey):
    # 開啟多線程全局熱鍵
    trigger = pyqtSignal()
    def __init__(self,UI):
        self.ui = UI
        super(HotKeyThread,self).__init__()
        self.register(('control', '1'), callback=lambda x: self.start())
        self.trigger.connect(self.hotKeyEvent)

    def run(self):
        self.trigger.emit()


    def hotKeyEvent(self):
        self.ui.screenshots_and_translate()

class MainFunction(Ui_MainWindow):
      # 主程序
      def __init__(self):
        super().__init__()
        self.trigger()

      def trigger(self):
        self.status = False
        self.tray = Tray(self)
        self.hotKey = HotKeyThread(self)
        self.pushButton_2.setToolTip("截圖(Ctrl+1)")  # 給按鈕2 添加提示氣泡,顯示快捷鍵方法
        self.pushButton_1.clicked.connect(self.screenshots_and_translate)  # 按鈕1 翻譯
        self.pushButton_2.clicked.connect(self.screenshots_and_translate)  # 按鈕2 截圖
    
      def screenshots_and_translate(self):
        butname = self.sender().objectName()
        if butname == "pushButton1":
            text = self.textedit.toPlainText()
            res = None
            if len(text) > 0:
                res = translate(text)
            self.textBrowser.setText(res)
        else:
            if not self.status:
                self.status = True
                self.showMinimized()
                time.sleep(0.5)
                self.activateWindow()
                self.child_window = Child_Dialog(self)  # 截圖
                self.child_window.dialogSignel.connect(self.slot_emit)
                self.child_window.show()

      def slot_emit(self, flag, str):
        self.activateWindow()
        self.showNormal()
        self.status = False
        if flag == 1:
            if self.checkBox.isChecked():
                res = translate(str)
            else:
                res = str
            self.textBrowser.setText(res)

      def closeEvent(self,QCloseEvent):
        QCloseEvent.ignore()
        self.hide()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MainFunction()
    sys.exit(app.exec_())

到此這篇關(guān)于基于PyQt5制作一個(gè)截圖翻譯工具的文章就介紹到這了,更多相關(guān)PyQt5截圖翻譯內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用Python批量生成任意尺寸的圖片

    利用Python批量生成任意尺寸的圖片

    不知道大家有沒有遇到過,因檢驗(yàn)需要1000張,分別從1*1到1000*1000像素的圖片。搜索一番過后發(fā)現(xiàn)還是Python實(shí)現(xiàn)比較方便,遂決定用Python實(shí)現(xiàn)這一功能,下面分享給大家,有需要的可以參考。
    2016-08-08
  • python?turtle庫(kù)畫圣誕樹詳細(xì)代碼教程

    python?turtle庫(kù)畫圣誕樹詳細(xì)代碼教程

    這篇文章主要介紹了python?turtle庫(kù)畫圣誕樹詳細(xì)代碼教程,圣誕節(jié)快到了,下面小編就來利用python?turtle庫(kù)畫一顆圣誕樹,?主要成分有圣誕樹的本體、大小蝴蝶結(jié)、星星、圣誕帽和襪子,需要的朋友可以參考一下
    2021-12-12
  • Python純代碼通過神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合方式

    Python純代碼通過神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合方式

    這篇文章主要介紹了Python純代碼通過神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)線性回歸的擬合方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 圖文詳解感知機(jī)算法原理及Python實(shí)現(xiàn)

    圖文詳解感知機(jī)算法原理及Python實(shí)現(xiàn)

    感知機(jī)是二類分類的線性分類模型,其輸入為實(shí)例的特征向量,輸出為實(shí)例的類別(取+1和-1二值)。本文將為大家詳細(xì)講講感知機(jī)算法的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-08-08
  • Python調(diào)用C語言的實(shí)現(xiàn)

    Python調(diào)用C語言的實(shí)現(xiàn)

    這篇文章主要介紹了Python調(diào)用C語言的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python flask開發(fā)的簡(jiǎn)單基金查詢工具

    python flask開發(fā)的簡(jiǎn)單基金查詢工具

    基于python flask開發(fā)的簡(jiǎn)單基金查詢工具,支持大盤指數(shù)實(shí)時(shí)情況查看,總持倉(cāng)實(shí)際漲幅、預(yù)估漲幅等功能,感興趣的朋友可以下載該項(xiàng)目來查看使用
    2021-06-06
  • python 實(shí)現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù)

    python 實(shí)現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù)

    這篇文章主要介紹了python 實(shí)現(xiàn)以相同規(guī)律打亂多組數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 使用Python實(shí)現(xiàn)快速搭建本地HTTP服務(wù)器

    使用Python實(shí)現(xiàn)快速搭建本地HTTP服務(wù)器

    這篇文章主要介紹了如何使用Python快速搭建本地HTTP服務(wù)器,輕松實(shí)現(xiàn)一鍵 HTTP 文件共享,同時(shí)結(jié)合二維碼技術(shù),讓訪問更簡(jiǎn)單,感興趣的小伙伴可以了解下
    2025-04-04
  • python中單下劃線與雙下劃線的區(qū)別及說明

    python中單下劃線與雙下劃線的區(qū)別及說明

    這篇文章主要介紹了python中單下劃線與雙下劃線的區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python多維/嵌套字典數(shù)據(jù)無限遍歷的實(shí)現(xiàn)

    Python多維/嵌套字典數(shù)據(jù)無限遍歷的實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄狿ython多維/嵌套字典數(shù)據(jù)無限遍歷的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11

最新評(píng)論

中超| 永平县| 松潘县| 湟源县| 玉环县| 安化县| 郁南县| 新兴县| 潜山县| 营口市| 蓝田县| 陆河县| 武鸣县| 东阳市| 旅游| 靖江市| 外汇| 甘谷县| 石泉县| 措勤县| 泸州市| 炉霍县| 锡林浩特市| 巴楚县| 习水县| 梓潼县| 宿州市| 柘荣县| 安图县| 中江县| 武乡县| 榕江县| 怀柔区| 宣威市| 乳源| 清涧县| 韶山市| 潜山县| 榕江县| 乌鲁木齐县| 普兰县|