Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » QtPy4 наведение файла на окно программы [RSS Feed]

#1 Окт. 31, 2012 09:00:47

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

Пытаюсь сделать парсер 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)



Офлайн

#2 Окт. 31, 2012 10:33:32

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

# -*- 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), выдается много информации.

Офлайн

#3 Окт. 31, 2012 11:18:08

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

Спасибо!
Я просто новичек в 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



Отредактировано Patrik (Окт. 31, 2012 11:26:18)

Офлайн

#4 Окт. 31, 2012 15:02:06

wizard_master
Зарегистрирован: 2012-10-11
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

NameError: global name ‘unicode’ is not defined

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

 import sys, os

Офлайн

#5 Окт. 31, 2012 17:40:04

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

Если Python 3.x, то вызов unicode() не нужен

files = [url.toLocalFile() for url in mimeData.urls()]

wizard_master
Ты наверное забыл сверху прописать
import sys, os
Это никак не связано.

Офлайн

#6 Окт. 31, 2012 21:15:25

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

Весь вечер крутил пример любезно предоставленный 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):
..
пытался вставить в свой код строки из примера и ни чего не работает….



Офлайн

#7 Ноя. 1, 2012 06:25:16

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

Похоже, вы не правильно используете файлы сгенерированные qt designer.
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/designer.html

Офлайн

#8 Ноя. 1, 2012 10:18:04

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

Я делал так, накидал интерфейс в qt designer, далее программой pyuic преобразовал ui в py
После писал все в с регенерированном файле py.



Офлайн

#9 Ноя. 1, 2012 10:32:32

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

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)
...

Офлайн

#10 Ноя. 1, 2012 11:02:10

Patrik
От:
Зарегистрирован: 2011-04-21
Сообщения: 70
Репутация: +  0  -
Профиль   Отправить e-mail  

QtPy4 наведение файла на окно программы

Надпись конечно смущает.
Но когда я начинаю из него выносить все что
написал ((( перестает работать, то что работало.



Офлайн

  • Начало
  • » GUI
  • » QtPy4 наведение файла на окно программы[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version