Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Drag'n'Drop файлов - нету нужных классов [RSS Feed]

#1 Март 7, 2009 20:38:34

Ockonal
От:
Зарегистрирован: 2009-03-05
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Drag'n'Drop файлов - нету нужных классов

Здравствуйте, столкнулся с проблемой:
мне нужно реализовать перетаскивание файлов в окно моей программы. Переопределил нужные события:

    def dragEnterEvent(self, event):
print 'dragEnterEvent coming...'
event.accept()
Проходит, теперь далее мне нужно получить полный путь к файлу, который был перетащен в окно:
    def dropEvent(self, event):
print 'dropEvent coming...'
droppedFileNames = QStrList()
QUriDrag.decode(event, droppedFileNames)
Вылетает ошибка:
NameError: global name ‘QUriDrag’ is not defined
P.S.
import sys
import os
import time
import threading

from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import *



Офлайн

#2 Март 7, 2009 21:54:43

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Drag'n'Drop файлов - нету нужных классов

Этот класс из прошлой версии Qt (как мне гугл подсказал). Я примерно так реализовывал дроп файлов:

mime = event.mimeData()
if mime.hasFormat('text/uri-list'):
links = urllib.unquote(str(mime.data('text/uri-list'))).splitlines()
....
Но тут есть такой нюанс, эти линки закодированы той кодировкой, которая используется в текущей файловой системе. Поэтому надо во-первых её знать и раскодировать линки в юникод, потом только с ними можно будет нормально работать… Сейчас только подумал, что наверное я сделал велосипед в своё время, и скорее всего есть готовое решение для этого по примеру того, что написано в примере выше (из Qt 3).



Офлайн

#3 Март 7, 2009 22:01:09

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Drag'n'Drop файлов - нету нужных классов

Блин, так и есть: функционал QUriDrag перешел в QMimeData и чтобы получить линки на файлы надо просто вызвать метод event.mimeData().urls(), который вернёт список с урлами… что можно с ними дальше делать - в документации написано.



Офлайн

#4 Март 7, 2009 22:02:36

Ockonal
От:
Зарегистрирован: 2009-03-05
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Drag'n'Drop файлов - нету нужных классов

Ок, спасибо. Мне главное, чтобы работало.
text/uri-list
Для всех типов файлов? Мне нужны абсолютно все. Подойдет такое?



Офлайн

#5 Март 7, 2009 22:25:34

Ockonal
От:
Зарегистрирован: 2009-03-05
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Drag'n'Drop файлов - нету нужных классов

Извиняюсь за то, что не посмотрел сразу в документацию. Проблему решено:

def dropEvent(self, event):
_pathToFile = event.mimeData().urls()
print _pathToFile[0].toLocalFile()
poltergeist, спасибо огромное за помощь!



Отредактировано (Март 7, 2009 22:27:25)

Офлайн

  • Начало
  • » GUI
  • » Drag'n'Drop файлов - нету нужных классов[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version