如何从我的 .exe (PyQt4 Python2.7 py2exe) 保存 .jpg 文件?

How can I save .jpg file from my .exe (PyQt4 Python2.7 py2exe)?

我的程序有问题,我正在使用 pyqt4 和 python2.7,我使用 py2exe 创建 .exe

问题是它应该创建的程序的屏幕截图没有保存在目录或任何其他方式中。

这是 setup.py

from distutils.core import setup
import py2exe

setup(windows=['capture.py'], options={"py2exe": {"includes": ["sip", "PyQt4.QtGui", "PyQt4.QtCore"]}})

这是 capture.py

import os
import datetime
import time
import sys
from PyQt4 import QtCore
from PyQt4.QtGui import *


class CaptureScreenShoot (QtCore.QThread):

    def __init__(self):
        QtCore.QThread.__init__(self, parent=app)
        self.count_time = 0
        self.complete_path = ""
        self.signal = QtCore.SIGNAL("signal")
        self.signal_cap = QtCore.SIGNAL("signal")

    def run(self):
        while True:
            now = datetime.datetime.now()
            date = str(now.strftime("%Y_%m_%d_%H_%M_%S"))
            currentPath = QtCore.QDir.homePath() + os.sep + "perfq_id_29" + os.sep
            dire = QtCore.QDir()
            if not dire.exists(currentPath):
                dire.mkpath(currentPath)
            filename = "Perfq29_" + date + ".jpg"
            self.complete_path = currentPath + filename
            self.emit(self.signal_cap, self.complete_path)
            #p = QPixmap.grabWindow(QApplication.desktop().winId())
            #print p.save(complete_path, 'jpg')
            self.count_time = self.count_time + 1
            self.emit(self.signal, self.count_time)
            time.sleep(10)


class CaptureTest(QWidget):

    def __init__(self):
        QWidget.__init__(self)
        self.setWindowTitle("Modulo de Captura de pantalla")
        self.move(500, 250)

        vBox = QVBoxLayout(self)

        self.boton = QPushButton("Start the Thread", self)
        self.label = QLabel("")
        self.label.hide()

        vBox.addWidget(self.boton)
        vBox.addWidget(self.label)

        self.boton.clicked.connect(self.call)

    def call(self):
        cap = CaptureScreenShoot()
        self.connect(cap, cap.signal_cap, self.picture)
        self.connect(cap, cap.signal, self.timer)
        cap.start()

    def timer(self, count):
        self.label.setText("Se han tomado <b> %s </b> capturas" % str(count))
        self.label.show()

    def picture(self, path):
        p = QPixmap.grabWindow(QApplication.desktop().winId())
        p.save(str(path), 'jpg')

app = QApplication(sys.argv)
w = CaptureTest()
w.show()
sys.exit(app.exec_())

我认为问题是您的 exe 在 运行 时找不到 imageformats 插件目录。解释器中的PyQt可以,exe不能。

最简单的解决方案就是将目录从 PyQt(类似于 Python27\Lib\site-packages\PyQt4\plugins\imageformats)复制到与您的可执行文件相同的目录中的某个位置。确保它在那里被称为 imageformats

不确定确切的目录 - 我使用 PySide,但我认为它非常相似。

我让我的 setup.py 使用

进行复制
ifpath = os.path.join(sys.prefix,"Lib","site-packages","PySide","plugins","imageformats")

distutils.dir_util.copy_tree(ifpath,dist_dir)