PyQT4: Перетащите файлы в QListWidget

Я кодировал функцию сканирования книг с оптическим распознаванием текста (она переименовывает страницы, читая номер страницы), и переключился на графический интерфейс с моего базового интерфейса командной строки Python. сценарий.

I ' m с помощью PyQT4 и просмотрел тонну документов перетаскиванием, но безуспешно. Он просто отказывается принимать эти файлы! Я использовал их в статьях для своего дизайна пользовательского интерфейса:

  1. http://tech.xster.net/tips/pyqt-drag-images-into-list-widget-for-thumbnail-list/

  2. http: / /zetcode.com/tutorials/pyqt4/dragdrop/

Я заметил, что существует ТОННА способов настроить графический интерфейс PyQT4. Какой из них работает лучше всего?

Ой, вот исходный код проекта.

Главный скрипт:

import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtGui import QListWidget
from layout import Ui_window

class StartQT4(QtGui.QMainWindow):
  def __init__(self, parent = None):
    QtGui.QWidget.__init__(self, parent)

    self.ui = Ui_window()
    self.ui.setupUi(self)

    QtCore.QObject.connect(self.ui.listWidget, QtCore.SIGNAL("dropped"), self.picture_dropped)

  def picture_dropped(self, l):
    for url in l:
     if os.path.exists(url):
      picture = Image.open(url)
      picture.thumbnail((72, 72), Image.ANTIALIAS)
      icon = QIcon(QPixmap.fromImage(ImageQt.ImageQt(picture)))
      item = QListWidgetItem(os.path.basename(url)[:20] + "...", self.pictureListWidget)
      item.setStatusTip(url)
      item.setIcon(icon)

class DragDropListWidget(QListWidget):
 def __init__(self, type, parent = None):
  super(DragDropListWidget, self).__init__(parent)
  self.setAcceptDrops(True)
  self.setIconSize(QSize(72, 72))

 def dragEnterEvent(self, event):
  if event.mimeData().hasUrls:
   event.accept()
  else:
   event.ignore()

 def dragMoveEvent(self, event):
  if event.mimeData().hasUrls:
   event.setDropAction(Qt.CopyAction)
   event.accept()
  else:
   event.ignore()

 def dropEvent(self, event):
  if event.mimeData().hasUrls:
   event.setDropAction(Qt.CopyAction)
   event.accept()
   l = []
   for url in event.mimeData().urls():
    l.append(str(url.toLocalFile()))
   self.emit(SIGNAL("dropped"), l)
  else:
   event.ignore()

if __name__ == "__main__":
  app = QtGui.QApplication(sys.argv)
  myapp = StartQT4()
  myapp.show()
  sys.exit(app.exec_())

И файл пользовательского интерфейса ...

# Form implementation generated from reading ui file 'layout.ui'
#
# Created: Thu Nov 11 00:22:52 2010
#      by: PyQt4 UI code generator 4.8.1
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_window(object):
    def setupUi(self, window):
        window.setObjectName(_fromUtf8("window"))
        window.resize(543, 402)
        window.setAcceptDrops(True)
        self.centralwidget = QtGui.QWidget(window)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.listWidget = QtGui.QListWidget(self.centralwidget)
        self.listWidget.setProperty(_fromUtf8("cursor"), QtCore.Qt.SizeHorCursor)
        self.listWidget.setAcceptDrops(True)
        self.listWidget.setObjectName(_fromUtf8("listWidget"))
        self.verticalLayout.addWidget(self.listWidget)
        window.setCentralWidget(self.centralwidget)

        self.retranslateUi(window)
        QtCore.QMetaObject.connectSlotsByName(window)

    def retranslateUi(self, window):
        window.setWindowTitle(QtGui.QApplication.translate("window", "PyNamer OCR", None, QtGui.QApplication.UnicodeUTF8))

Спасибо всем, кто может помочь!

11
задан gruszczy 22 December 2010 в 15:57
поделиться