2011-01-03 13 views
5

मैं एक पुस्तक बाध्यकारी अनुप्रयोग पर (अभी भी) काम कर रहा हूं, और इसे सौंदर्यपूर्ण रूप से प्रसन्न करने के लिए, मैंने आपके द्वारा खींचने वाले प्रत्येक पृष्ठ पर एक थंबनेल जोड़ा है। यह ठीक काम करता है, लेकिन एकमात्र समस्या यह है कि जब मैं खींचता हूं एक पूरी किताब (यानी 400 छवियां), यह पूरी तरह से को पूरा होने तक फ्रीज करता है। सिर्फ एक पक्ष के रूप में सवालमैं PyQT4 के साथ 300 छवियों को थंबनेल कैसे करूं?

def fileDropped(self, file): 
    f = str(file[-1]) 

    if os.path.splitext(f)[1][1:] != 'tif': 
     reply = QtGui.QMessageBox.question(self, 'Message', 'All files must be TIF images. Would you like me to convert a copy of your file to the TIF format?', QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) 

     if reply == QtGui.QMessageBox.Yes: 
     if not os.path.exists('./djvu_backup/'): os.mkdir('./djvu_backup/') 



     if f not in self.getChildren(self.ui.pageList): # It's a custom method. It does what it looks like it does. 
      icon = QtGui.QIcon(f) 
      pixmap = icon.pixmap(72, 72) 
      icon = QtGui.QIcon(pixmap) 
      item = QtGui.QListWidgetItem(f, self.ui.pageList) 
      item.setIcon(icon) 
      item.setStatusTip(f) 

     return True 

इसके अलावा, जैसा कि आप कोड में देख सकते हैं, f = str(file[-1]):

यहाँ मेरी सरल ड्रॉप कोड है। जब भी विधि को बुलाया जाता है, तो मुझे अपनी गिराए गए फाइल सरणी से अंतिम तत्व चुनना होता है, क्योंकि इसे प्रत्येक फ़ाइल को छोड़ने के लिए कहा जाता है, भले ही वे सभी एक बार में गिराए जाएं। क्या इसके लिए कोई कारण/कामकाज है?

धन्यवाद!

+0

आपको थ्रेडिंग की आवश्यकता है - http://stackoverflow.com/questions/1595649/threading-in-a-pyqt-application-use-qt-threads-or-python-threads –

+0

पायथन प्रश्न के लिए धन्यवाद। मैं इसके माध्यम से ब्राउज़ करूंगा। – Blender

उत्तर

5

आप थंबनेलिंग को तेज़ बनाने की कोशिश कर सकते हैं, लेकिन इससे आपको उस समस्या का आकार बढ़ जाएगा जो आप समस्या को ध्यान में रखे जाने से पहले छोड़ सकते हैं। उत्तर या तो पृष्ठ को केवल थंबनेल के रूप में प्रदर्शित किया जाता है, या पृष्ठभूमि थ्रेड पर थंबनेलिंग को रेखांकित करता है और प्रत्येक के समाप्त होने पर डिस्प्ले अपडेट करता है।

+0

मुझे लगता है कि उत्तरार्द्ध एक बेहतर विकल्प हो सकता है। क्या Python के साथ ऐसा करने का कोई तरीका है? – Blender

0

मुझे पता है कि यह वास्तव में सरल है, लेकिन क्या आपने एक QProgressBar का उपयोग करने पर विचार किया है ताकि उपयोगकर्ता देख सकें कि प्रोग्राम अभी भी प्रसंस्करण हो रहा है जब यह जमे हुए प्रतीत होता है?

+0

प्रतिक्रिया का थोड़ा देर हो चुकी है, लेकिन मैंने इसे 'क्यू थ्रेड' में एक स्टेटस संदेश और पहले से ही अच्छी चीजें के साथ लागू किया है;) – Blender

संबंधित मुद्दे