2011-01-03 13 views
5

Pracuję (wciąż) nad aplikacją wiążącą książki i aby była przyjemna pod względem estetycznym, dodałem miniaturę do każdej strony, którą przeciągasz. Działa to dobrze, ale jedynym problemem jest to, że gdy przeciągam cała książka (tj. 400 obrazów), całkowicie zamarza , dopóki nie zostanie ukończona.Jak mogę (szybko) miniaturować 300 obrazów za pomocą PyQT4?

Oto mój prosty kod drop:

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 

Ponadto, podobnie jak pytanie z boku, jak widać w kodzie, f = str(file[-1]). Muszę wybrać ostatni element z mojej opuszczonej tablicy plików za każdym razem, gdy wywoływana jest metoda, ponieważ jest wywoływana dla każdego upuszczonego pliku, nawet jeśli zostały one upuszczone wszystkie naraz. Czy istnieje powód/obejście tego problemu?

Dziękujemy!

+0

Potrzebujesz wątku - http://stackoverflow.com/questions/1595649/threading-in-a-pyqt-application-use-qt-threads-or-python-threads –

+0

Dzięki za pytanie w Pythonie. Przejrzę to. – Blender

Odpowiedz

5

Możesz spróbować zrobić miniaturę szybciej, ale to tylko zwiększy rozmiar książki, którą możesz upuścić, zanim zauważysz problem. Odpowiedzi mogą polegać tylko na tym, że wyświetlana jest tylko miniatura strony, lub odsuwanie miniatury od wątku tła i aktualizowanie wyświetlania po zakończeniu każdego z nich.

+0

Myślę, że ten drugi może być lepszym rozwiązaniem. Czy można to zrobić za pomocą Pythona? – Blender

0

Wiem, że to jest naprawdę proste, ale czy rozważyłeś użycie QProgressBar tylko po to, aby użytkownicy mogli zobaczyć, że program jest nadal przetwarzany, gdy wydaje się być zamrożony?

+0

Trochę za późno, ale zaimplementowałem to w 'QThread' z komunikatem o statusie i wszystkim, co już jest dobre;) – Blender

Powiązane problemy