Drag & Drop в KListWidget (программирование PyQt / PyKde) - PullRequest
0 голосов
/ 27 апреля 2009

Я разрабатываю небольшое приложение (именно плазмоид 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 Ответ

0 голосов
/ 28 апреля 2009

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.

...