Перетаскивание в KListWidget (программирование PyQt/PyKde)

Я разрабатываю небольшое приложение (именно это плазмоид KDE4) в PyQt/PyKde.

В моем приложении у меня есть KListWidget, заполненный несколькими строками, см. Эту картинку:

http://img212.imageshack.us/img212/8444/sshot3.jpg

Мне нужно реализовать действие перетаскивания для строк списка, например, я должен иметь возможность поместить любой файл поверх строки, тогда приложение отправит этот файл на имя в списке.

Список был создан с помощью этого фрагмента кода:

self.contactsList = KListWidget()
self.contactsList.setFrameShape(QFrame.StyledPanel)
self.contactsList.setFrameShadow(QFrame.Sunken)
self.contactsList.setIconSize(QSize(35, 35));

Метод для вызова, когда происходит перетаскивание, уже реализован, мне нужно только подключить метод к списку способом, похожим на:

self.connect(self.contactsList, SIGNAL("signal_()"), self.method)

Любая помощь будет оценена

1 ответ

Сигналы PyQt могут быть определены динамически, поэтому, пока класс, который определяет self.contacts_list_method() наследует от QWidget, он может излучать динамический сигнал.

Например, в конце метода в объекте contactsList, который обрабатывает ваш список с добавлением кода:

def contacts_list_method(self, someparameters):
  doStuff()
  doMoreStuff()
  ...
  self.emit(QtCore.SIGNAL("contacts_list_method_done()"))

Затем в инициализаторе класса, который содержит объект contactsList (или там, где вы чувствуете себя лучше), установите следующее соединение:

self.connect(self.contactsList, SIGNAL("contacts_list_method_done()"), self.method)

Вы также можете предварительно определить QtCore.SIGNAL("contacts_list_method_done()") как объект, а затем просто ссылаться на объект, когда вы создаете его в contacts_list_method.

Другие вопросы по тегам