【问题标题】:How to run a external process on a PyQt5 OSX app, without crashing the app?如何在 PyQt5 OSX 应用程序上运行外部进程,而不会使应用程序崩溃?
【发布时间】:2018-03-13 15:31:44
【问题描述】:

我目前正在构建一个使用 OCR 来使用 PYQT5 从 PDF 文件中提取数据的应用程序,我需要在运行 OCR 之前使用终端将 pdf 转换为 jpeg;但是,当我在编译后运行这个子进程时它会崩溃,但如果我不编译程序,它会完美运行。

在我看来,问题在于子进程调用。我尝试了很多不同的方法,但我不知道为什么我的应用在编译并运行转换后总是崩溃。

注意:对于 PDF 到 JPEG,我使用 ImageMagick

目前用于编译:

py2applet --make-setup main.py
python3 setup.py py2app

Converter.py:

from subprocess import call
from PIL import Image
import pytesseract 
from PyQt5 import QtWidgets
from ocrgui import Ui_MainWindow

class ImageConverter(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.show()
        self.sbmt_btn_convert.clicked.connect(self.convert_image)

    def convert_image(self): #Converts image into jpeg
        text = str(self.input_convert.text())
        output = str(self.output_convert.text())

        convert = 'converted.jpeg'
        call('convert -density 300 ' + text + ' ' + convert, shell=True)

        im = Image.open(convert)
        text = pytesseract.image_to_string(im, lang = 'eng')
        file = open(output,'w')
        file.write(text)
        file.close()

        call('rm converted.jpeg', shell=True)
        print('Succesfully created')

Main.py:

import sys
from PyQt5.QtWidgets import QApplication
from calculator import CalculatorWindow

app = QApplication(sys.argv)

calculator = CalculatorWindow()

sys.exit(app.exec()) 

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 external-process


    【解决方案1】:

    我认为下一个模块中的问题:

    pathPython\Lib\site-packages\PIL\ImageQt.py

    试着把#放在下一行:

    ...
    try:
        from PyQt5.QtGui import QImage, qRgba, QPixmap
        from PyQt5.QtCore import QBuffer, QIODevice
        qt_version = '5'
    except (ImportError, RuntimeError):
        print("except (ImportError, RuntimeError):!!!!!!!!!!!!")
        #try:
        #    from PyQt4.QtGui import QImage, qRgba, QPixmap
        #    from PyQt4.QtCore import QBuffer, QIODevice
        #    qt_version = '4'
        #except (ImportError, RuntimeError):
        #    try:
        #        from PySide.QtGui import QImage, qRgba, QPixmap
        #        from PySide.QtCore import QBuffer, QIODevice
        #        qt_version = 'side'
        #    except ImportError:
        #        qt_is_installed = False
    ...
    

    【讨论】:

    • 这没什么区别,顺便说一句,它应该解决什么问题?
    • 您是否尝试在 ImageQt.py 中删除这些行?删除这些行并重新组装文件 exe。
    • 我做了,还是不行。不确定问题可能出在哪里...您是否有任何示例说明如何从应用程序中调用外部脚本?
    • PySide.QtCore.QProcess 类用于启动外部程序并与它们进行通信。 pyside.github.io/docs/pyside/PySide/QtCore/…
    • 我也尝试过 Qprocess,但它一直在崩溃。你知道有什么方法可以检查为什么应用程序在编译后会崩溃吗?就像你在终端测试时所做的一样(终端通常会告诉你原因,但编译后什么都没有显示)我开始认为是别的东西......
    猜你喜欢
    • 2016-06-23
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多