Найти - Пользователи
Полная версия: QtPy4 наведение файла на окно программы
Начало » GUI » QtPy4 наведение файла на окно программы
1 2
Patrik
Пытаюсь сделать парсер XML, научился открывать его с помощью диалога QFileDialog
       QtCore.QObject.connect(self.action, QtCore.SIGNAL('triggered()'), self.showDialog)
    def showDialog(self):
        fileName = QtGui.QFileDialog.getOpenFileName(None, "Load Data", "/home/", "xml-files (*.xml)")     
        tree = etree.parse(fileName)
        root = tree.getroot()

Как сделать, чтобы при перетаскивания файла xml, на интерфейс
программы, он передавался tree = etree.parse(fileName)
reclosedev
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
 
# это не обязательно должно быть главное окно
# может быть просто виджет
class MainWindow(QtGui.QWidget):  
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setAcceptDrops(True)
        
    def dragEnterEvent(self, event):
        event.acceptProposedAction()
        
    def dragMoveEvent(self, event):
        event.acceptProposedAction()
        
    def dragLeaveEvent(self, event):
        event.accept()
        
    def dropEvent(self, event):
        mimeData = event.mimeData()
        if mimeData.hasUrls():
            files = [unicode(url.toLocalFile()) for url in mimeData.urls()]
            event.acceptProposedAction()
            print files # можно делать что-то с именами файлов
            
 
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    mainwindow = MainWindow()
    mainwindow.resize(300, 300)
    mainwindow.show()
    sys.exit(app.exec_())
А вообще, это называется drag and drop, и если набрать в поисковике данную фразу в сочетании с названием фреймворка (pyqt, qt, pyside), выдается много информации.
Patrik
Спасибо!
Я просто новичек в python, поискать с drag and drop не догадался.

Твой пример выдает ошибку:

Traceback (most recent call last):
File “C:/fin/testing.py”, line 24, in dropEvent
files = unicode(url.toLocalFile()) for url in mimeData.urls()
File “C:/fin/testing.py”, line 24, in <listcomp>
files = unicode(url.toLocalFile ()) for url in mimeData.urls()
NameError: global name ‘unicode’ is not defined
wizard_master
NameError: global name ‘unicode’ is not defined

unicode() - встроенная в питон фун-ция, которая преобразует текс в юникод. Ты наверное забыл сверху прописать
 import sys, os

reclosedev
Если Python 3.x, то вызов unicode() не нужен
files = [url.toLocalFile() for url in mimeData.urls()]

wizard_master
Ты наверное забыл сверху прописать
import sys, os
Это никак не связано.
Patrik
Весь вечер крутил пример любезно предоставленный reclosedev.
Все отлично работает.
Интерфейс моего пассера накидан в qt designer.
Он такого вида:
import sys
from PyQt4 import QtCore, QtGui
import xml.etree.ElementTree as etree
try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s
    
class Ui_MainWindow(object):
..
пытался вставить в свой код строки из примера и ни чего не работает….
reclosedev
Похоже, вы не правильно используете файлы сгенерированные qt designer.
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/designer.html
Patrik
Я делал так, накидал интерфейс в qt designer, далее программой pyuic преобразовал ui в py
После писал все в с регенерированном файле py.
reclosedev
Patrik
После писал все в с регенерированном файле py.
Неужели надпись
# WARNING! All changes made in this file will be lost!
не пугает?

Почитайте по ссылке как нужно организовывать код.

В кратце: если Ui_MainWindow находится, например, в ui_main_window.py

То код (в другом файле, допустим, application.py) будет выглядеть примерно так:
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
 
from ui_main_window import Ui_MainWindow
 
 
class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # или QWidget
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setAcceptDrops(True)
        self.setupUi(self)
...
Patrik
Надпись конечно смущает.
Но когда я начинаю из него выносить все что
написал ((( перестает работать, то что работало.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB