كيفية تحميل صورة نقطية على نافذة على pyqt
سؤال
لدي حاليا صورة PIL التي أرغب في عرضها على نافذة PYQT. أعلم أن هذا يجب أن يكون سهلا، لكنني لا أستطيع أن أجد في أي مكان كيفية القيام بذلك. هل يمكن لأي شخص أن يعطيني يد في هذا؟ هنا هو رمز النافذة لدي حاليا:
import sys
from PyQt4 import QtGui
class Window(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Window')
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
تحرير: وفقا لبرمجة واجهة المستخدم الرسومية السريعة مع كيو تي وثيمون:
وفقا لتوثيق PYQT، يتم تحسين qpixMaps لعرض شاشة على الشاشة (لذلك فهي سريعة السحب)، ويتم تحسين تشيمات حول التحرير (وهذا هو السبب في أننا استخدمناها لعقد بيانات الصورة).
لدي خوارزمية معقدة من شأنها أن تولد صورا أريد إظهارها على نافذتي. سيتم إنشاؤها بسرعة كبيرة، حتى يستقبل المستخدمون تماما مثل الرسوم المتحركة (يمكن أن يكون هناك مثل 15+، 20+ منها في الثانية). يجب أن أستخدم qpixmaps أو Qimages؟
المحلول
جرب شيئا من هذا القبيل، يمكنك استخدامه http://svn.effbot.org/public/stuff/sandbox/pil/imageqt.py. لتحويل أي صورة PIL إلى Qimage
import sys
from PyQt4 import QtGui
from PIL import Image
def get_pil_image(w, h):
clr = chr(0)+chr(255)+chr(0)
im = Image.fromstring("RGB", (w,h), clr*(w*h))
return im
def pil2qpixmap(pil_image):
w, h = pil_image.size
data = pil_image.tostring("raw", "BGRX")
qimage = QtGui.QImage(data, w, h, QtGui.QImage.Format_RGB32)
qpixmap = QtGui.QPixmap(w,h)
pix = QtGui.QPixmap.fromImage(qimage)
return pix
class ImageLabel(QtGui.QLabel):
def __init__(self, parent=None):
QtGui.QLabel.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('Window')
self.pix = pil2qpixmap(get_pil_image(50,50))
self.setPixmap(self.pix)
app = QtGui.QApplication(sys.argv)
imageLabel = ImageLabel()
imageLabel.show()
sys.exit(app.exec_())
نصائح أخرى
reparging إلى هذه المناقشة, ، ستكون أسرع طريقة لاستخدام Glpainter من أجل الاستفادة من أداء بطاقة الرسوم البيانية.