سؤال

يجب أن يكون هذا أكبر مصدر إزعاج واجهته مع PYQT: لقد اخترقت خيطًا مصغرة لتطبيقي (يجب أن أتعرض لأطنان مصغرة من الصور الكبيرة) ، ويبدو أنه سيعمل (ويبدو أنه سيعمل (وهو تقريبيا يفعل). مشكلتي الرئيسية هي رسالة الخطأ هذه كلما أرسلت ملف SIGNAL من موضوعي:

QPixmap: It is not safe to use pixmaps outside the GUI thread

لا يمكنني معرفة كيفية الالتفاف على هذا. لقد حاولت تمرير أ QIcon من خلال بلدي SIGNAL, ، لكن هذا لا يزال يولد نفس الخطأ. إذا كان ذلك مفيدًا ، فإليك كتل الكود التي تتعامل مع هذه الأشياء:

ال Thumbnailer صف دراسي:

class Thumbnailer(QtCore.QThread):
  def __init__(self, ListWidget, parent = None):
    super(Thumbnailer, self).__init__(parent)
    self.stopped = False
    self.completed = False
    self.widget = ListWidget

  def initialize(self, queue):
    self.stopped = False
    self.completed = False
    self.queue = queue

  def stop(self):
    self.stopped = True

  def run(self):
    self.process()
    self.stop()

  def process(self):
    for i in range(self.widget.count()):
      item = self.widget.item(i)

      icon = QtGui.QIcon(str(item.text()))
      pixmap = icon.pixmap(72, 72)
      icon = QtGui.QIcon(pixmap)
      item.setIcon(icon)

الجزء الذي يستدعي الخيط (يحدث عندما يتم إسقاط مجموعة من الصور على مربع القائمة):

  self.thread.images.append(f)

  item = QtGui.QListWidgetItem(f, self.ui.pageList)
  item.setStatusTip(f)

  self.thread.start()

لست متأكدًا من كيفية التعامل مع هذا النوع من الأشياء ، لأنني مجرد مبتدئ في واجهة المستخدم الرسومية ؛)

شكرا للجميع.

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

المحلول

بعد العديد من المحاولات ، حصلت عليها أخيرًا. لا يمكنني استخدام أ QIcon أو QPixmap من داخل خيط غير GUI ، لذلك اضطررت إلى استخدام ملف QImage بدلا من ذلك ، لأن ذلك ينقل بشكل جيد.

هذا هو الرمز السحري:

مقتطف من thumbnailer.py QThread صف دراسي:

  icon = QtGui.QImage(image_file)
  self.emit(QtCore.SIGNAL('makeIcon(int, QImage)'), i, icon)

makeIcon() وظيفة:

  def makeIcon(self, index, image):
    item = self.ui.pageList.item(index)
    pixmap = QtGui.QPixmap(72, 72)
    pixmap.convertFromImage(image) #   <-- This is the magic function!
    icon = QtGui.QIcon(pixmap)
    item.setIcon(icon)

آمل أن يساعد هذا أي شخص آخر يحاول إنشاء موضوع مصغرة صورة ؛)

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