2011-01-03 23 views
5

Tôi đang làm việc (vẫn còn) trên một ứng dụng ràng buộc sách và làm cho nó đẹp mắt về mặt thẩm mỹ, tôi đã thêm hình thu nhỏ vào mọi trang bạn kéo vào. Nó hoạt động tốt, nhưng vấn đề duy nhất là khi tôi kéo toàn bộ một cuốn sách (tức là 400 hình ảnh), nó đóng băng hoàn toàn cho đến khi hoàn tất.Làm cách nào để (nhanh) thu nhỏ 300 hình ảnh với PyQT4?

Đây là mã thả đơn giản của tôi:

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 

Ngoài ra, cũng giống như một câu hỏi phụ, như bạn có thể thấy trong các mã, f = str(file[-1]). Tôi phải chọn phần tử cuối cùng từ mảng tệp đã bị xóa của mình mỗi khi phương thức được gọi, vì nó được gọi cho mọi tệp bị xóa, ngay cả khi chúng bị bỏ tất cả cùng một lúc. Có lý do/giải pháp cho việc này không?

Cảm ơn bạn!

+0

Bạn cần luồng - http://stackoverflow.com/questions/1595649/threading-in-a-pyqt-application-use-qt-threads-or-python-threads –

+0

Cảm ơn câu hỏi Python. Tôi sẽ duyệt qua nó. – Blender

Trả lời

5

Bạn có thể thử làm cho hình thu nhỏ nhanh hơn, nhưng điều đó sẽ chỉ làm tăng kích thước của cuốn sách mà bạn có thể thả trước khi bạn nhận thấy sự cố. Các câu trả lời là hoặc chỉ thu nhỏ một trang như nó được hiển thị, hoặc relegate các thumbnailing đến một sợi nền và cập nhật màn hình hiển thị khi từng được hoàn thành.

+0

Tôi nghĩ rằng sau này có thể là một lựa chọn tốt hơn. Có cách nào để làm điều này với Python? – Blender

0

Tôi biết điều này thực sự đơn giản nhưng bạn đã xem xét sử dụng QProgressBar chỉ để người dùng có thể thấy rằng chương trình vẫn đang xử lý khi nó xuất hiện bị đóng băng?

+0

Một chút trễ của một phản ứng, nhưng tôi đã thực hiện điều này trong một 'QThread' với một thông điệp trạng thái và tất cả những thứ tốt đã có;) – Blender

Các vấn đề liên quan