سؤال

أنا أكتب برنامجا باستخدام PYQT4 لوي الواجهة المستخدمية واجهة المستخدم الرسومية الأمامية وهذا البرنامج يصل إلى قاعدة بيانات النهاية الخلفية (والتي يمكن أن تكون إما MySQL أو SQLite). أحتاج إلى تخزين بعض بيانات الصورة في قاعدة البيانات وتحت رمز Python الذي أستخدمه لاستيراد ملفات الصور (بتنسيق JPEG) إلى حقل بيانات Blob في قاعدة البيانات:

def dump_image(imgfile):
    i = open(imgfile, 'rb')
    i.seek(0)
    w = i.read()
    i.close()
    return cPickle.dumps(w,1)

blob = dump_image(imgfile)
hex_str = blob.encode('hex') 
# x"%s"%hex_str will be the string inserted into the SQL command

هذا الجزء يعمل بشكل جيد. سؤالي حول كيفية إنشاء كائن QPixMap من بيانات الصورة المخزنة في قاعدة البيانات في Pyqt4. ينطوي نهجي الحالي على الخطوات التالية:

(1) HEX Str في قاعدة البيانات - CPICKLE & Stringio -> كائن صورة PIL

def load_image(s):
    o = cPickle.loads(s)
    c = StringIO.StringIO()
    c.write(o)
    c.seek(0)
    im = Image.open(c)
    return im

(2) كائن صورة PIS -> ملف صورة مؤقت

(3) ملف صورة مؤقت -> qpixmap

هذا النهج يعمل أيضا بشكل جيد. ولكن سيكون من الأفضل إذا لم يكن لدي لكتابة / قراءة ملفات الصور المؤقتة التي قد تبطئ استجابة البرامج إلى تفاعلات المستخدم. أعتقد أنني يمكن أن تستخدم qpixmap :: loadfromdata () للتحميل مباشرة من البيانات BLOB المخزنة في قاعدة البيانات والأمل، يمكن أن ينص لي شخص ما هنا مثالا على كيفية استخدام هذه الوظيفة.

تيا،

بينج

هل كانت مفيدة؟

المحلول

يمكنك استخدام الطريقة الثابتة Qimage.FromData لتحميل صورة من سلسلة ثم تحويلها إلى Pixmap:

 image_data = get_image_data_from_blob()
 qimg = QtGui.QImage.fromData(image_data)
 pixmap = QtGui.QPixmap.fromImage(qimg)

نصائح أخرى

يعمل النهج الذي اقترحه النمل AASMA وأنه في الواقع هو أيضا موافق فقط لاستخدام التعليمات البرمجية التالية:

image_data = cPickle.loads(str(s)) # s is fetched from DB 
qp = QPixmap() 
qp.loadFromData(image_data) 

شكرا جزيلا لجميع المساعدة والمعلومات.

بعد ساعة جيدة ونصف Googleing لحل مشكلة مماثلة، انتهى بي الأمر إلى تحميل JPEGS في ملف .EXE مجمعة مع QT. أنا أستخدم Python3.1، وبالتالي لا يمكن استخدام بعض الحلول المذكورة سابقا:

  • نصائح تعمل من أجل py2exe (لأنني أستخدم cxfreeze بدلا من py2exe، كما يعمل py2exe فقط من أجل python2)،
  • نصائح تتطلب PIL (أيضا من أجل Python2، AFAIK).

في حين أن الحلول المنشورة هنا لم تنجح، فعلت شيئا مشابها للغاية: نسخ ببساطة [PythonDir]\Lib\site-packages\PyQt4\plugins\imageformats إلى مجلد exe الخاص بي وإزالة qt.conf ملف الذي قمت بإنشائه في هذا المجلد بعد حلول أخرى. هذا كل شيء (أعتقد: P).

بعد ذلك، عملت سواء قمت بتحميل JPG باستخدام QPixmapمنشئ أو تحميل QImage أول. كما عملت مع عدم وجود خيار خاص مطلوب لكل من setup.py و ال cxfreeze.bat طرق تجميع إلى exe باستخدام cxfreeze.

(تم نشر هذا الحل بواسطة JBZ http://www.thetoryparty.com/wp/2009/08/27/pyqt-and-py2app-i-dont-know-what-do-do-with-you-when-youre-like- هذا)

هذا السؤال قديم قديم بعض الشيء، ولكن كما يبدو أن المشكلة لا تزال موجودة، آمل أن تساعد هذه الإجابة على python3.1 المستخدمين هناك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top