Перетаскивание в 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.