2012-05-07 15 views
5

Tôi đang cố gắng để có được QImage (hoặc bất cứ điều gì trong PyQt4, cho rằng vấn đề) để tải một tập tin jpg trong một kịch bản. Tôi đã không thể tìm thấy bất kỳ thông tin về làm thế nào để có được nó để tải một hình ảnh jpg như một kịch bản, rất nhiều cho biên dịch bằng cách sử dụng py2exe nhưng tôi thậm chí không thể có được rằng đến nay.PyQt4 jpeg/jpg định dạng hình ảnh không được hỗ trợ

Chi tiêu một số thời gian để giải quyết điều này, tôi đã theo một vài điều với vô ích ... Nhìn vào trang web-gói của tôi/PyQt4/plugins/imageformats thư mục tôi có:

qgif4.dll, qico4 .dll, qjpeg4.dll, qmng4.dll, qsvg4.dll, qtga4.dll, qtiff4.dll

Theo QtGui.QImageReader.supportedImageFormats(), đây là những gì tôi cài đặt của pyqt4 có thể sử dụng

[ PyQt4.QtCore.QByteArray ('bmp'), PyQt4.QtCore.QByteArray ('pbm'), PyQt4.QtCore.QByteArray ('pgm'), PyQt4.QtCore.QByteArray ('png'), PyQt4.QtCore.QByteArray ('p pm '), PyQt4.QtCore.QByteArray (' XBM '), PyQt4.QtCore.QByteArray (' xpm ')]

Tôi cũng đã thực hiện chắc chắn rằng tập tin qt.conf của tôi là trong thư mục python chính và nó đã này

[Paths]

Prefix = C:/Python27/Lib/site-packages/PyQt4 
Binaries = C:/Python27/Lib/site-packages/PyQt4 

tôi đã thử thêm

Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins/imageformats 
Plugins = C:/Python27/Lib/site-packages/PyQt4/plugins 

không có may mắn

tôi chạy python 2.7.2, với PyQt4 4.9.1 (cả 32b), trên một cửa sổ 7 64b Home Premium.

Tôi cũng đã thử phiên bản 4.8.1 và 4.8.5 (mà tôi đã có trong tay) nhưng không ai trong số họ cũng hỗ trợ jpg. Tôi đang thua lỗ. Làm thế nào để tôi nhận được những hỗ trợ này?

+0

Lạ. Đối với tôi điều này đã được một mối quan tâm một lần trên OSX khi nó đến để đóng gói với py2app, nhưng không bao giờ trong một tình huống kịch bản. Nó luôn luôn quản lý để tìm các plugin đúng cách. – jdi

+0

Chà, nó không chỉ là 'JPEG' Có vẻ như PyQt không thể tải bất kỳ tệp 'dll' nào. Bạn có thể thử 'Plugins = plugins' không? Nó không nên là con đường đầy đủ. – Avaris

+0

Tôi đã thử các plugin và sau đó thử '/ plugins', '/ plugins/imageformats', 'plugins/imageformats' để có biện pháp tốt. không có gì. – ooklah

Trả lời

6

Có hai vấn đề khác nhau có vẻ như có thể góp phần gây ra điều này. Và có vẻ như tôi chạy vào cả hai.

1st. Tôi đã chạy trình cài đặt PyQt4 'làm quản trị viên' mà dường như đã giải quyết được một phần vấn đề. Vì vậy, nó cần phải được chạy như là quản trị viên để có được tất cả mọi thứ để hoạt động chính xác.

2nd. Để tất cả các plugin tải đúng cách, QApplication phải được thực hiện trước khi bất kỳ loại hình ảnh nào được tải.

nên

app = QtGui.QApplication(sys.argv) 

cần phải được tạo đầu tiên.

kịch bản của tôi chạy như

def main(): 
    app = QtGui.QApplication(sys.argv) 
    win = window() 
    win.display() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 

mà đã không thay đổi kể từ khi tôi cài đặt PyQt4 như một quản trị viên nhưng hiện đang làm việc và tải JPEG và mọi thứ khác.

Những gì tôi đã cố gắng làm, đã tạo ra một tập lệnh sẽ được gọi bằng ứng dụng PyQt4 nhưng nó sẽ không tự chạy, do đó không cần phải tạo QApplcation trước.Đó là nơi tôi chạy vào vấn đề # 2

Để tham khảo: http://article.gmane.org/gmane.comp.python.pyqt-pykde/7176/match=jpeg+plugin+not+loading

Install as administrator và luôn tạo QApplication, ngay cả khi bạn không cần nó.

cũng

nếu bạn chỉ là kiểm tra để xem những gì có sẵn trong nhàn rỗi:

from PyQt4 import QtGui 
QtGui.QImageReader.supportedImageFormats() 

sẽ không hiển thị tất cả mọi thứ, vẫn cần phải chạy

from PyQt4 import QtGui 
import sys 
app = QtGui.QApplication(sys.argv) 
QtGui.QImageReader.supportedImageFormats() 

này đã gây phiền nhiễu để theo dõi xuống, vì vậy hy vọng điều này sẽ hữu ích cho người khác.

+1

Vì vậy, tôi chỉ chạy với virtualenv trên Windows (sao chép PyQt4 từ các gói trang web toàn cục đến các gói trang web env) - Tôi phải tạo qt.conf như được chỉ định trong bản gốc đăng bên cạnh Scripts \ python.exe - sau đó mọi thứ hoạt động giống như nó! – Strayer

+0

Nếu có ai biết cách tải các plugin mà không cần tạo QApplication, vui lòng thêm nhận xét tại đây; nó sẽ rất hữu ích cho những người trong chúng ta chỉ sử dụng QImage như là một lớp tải hình ảnh tiện ích. – GaryO

+0

Mỏ sẽ không hoạt động cho đến khi tôi đặt cuộc gọi QApplication vào __main__. Nó không hoạt động với QApplication trong main() như bạn đã thể hiện nó. Rất lạ, nhưng loại bỏ việc sử dụng chính() đã sửa nó cho tôi. – panofish

0

Chỉ trong trường hợp ai đó đang tìm nạp plugin, tôi đã created an answer for a more proper question here để cho phép bạn đặt cơ bản các plugin trong bất kỳ thư mục chia sẻ mạng nào.

Tóm lại, sử dụng QtCore.QCoreApplication.addLibraryPath() thay vì tệp qt.conf.