Найти - Пользователи
Полная версия: QtPy4 наведение файла на окно программы
Начало » GUI » QtPy4 наведение файла на окно программы
1 2
Patrik
Сделал мини пример:
первый файл то, что с генерировал pyuic4
название файла ui_main_window.py
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'usr.ui'
#
# Created: Fri Oct 26 16:44:10 2012
#      by: PyQt4 UI code generator 4.9.5
#
# WARNING! All changes made in this file will be lost!
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):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(1154, 883)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow) 
    MainWindow.show()
    sys.exit(app.exec_())  

второй файл test.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)
        
    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 = [url.toLocalFile() for url in mimeData.urls()]
            event.acceptProposedAction()
            print(files) # можно делать что-то с именами файлов
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow) 
    MainWindow.show()
    sys.exit(app.exec_())  

Почему-то перетаскивание не работает, хотя вроде все правильно.
reclosedev
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MainWindow() # !!!
    window.show()  # !!!
    sys.exit(app.exec_())  
Patrik
Спасибо теперь заработало.
Получился такой код, мня немного смущает моя связка открытия файла диалогом и при перетаскивание файла.

Есть еще такой вопрос будет ли открываться с этим кодом xml файл если его ассоциировать или навести на выполняемый модуль ???
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui
import xml.etree.ElementTree as etree 
from ui_main_window Ui_MainWindow
  
class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setAcceptDrops(True)
        self.setupUi(self)
        QtCore.QObject.connect(self.action_2, QtCore.SIGNAL('triggered()'),QtGui.qApp, QtCore.SLOT('quit()'))
        QtCore.QObject.connect(self.action, QtCore.SIGNAL('triggered()'), self.showDialog)
    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():
            file = [url.toLocalFile() for url in mimeData.urls()]
            event.acceptProposedAction()
            global fileName
            fileName = file[0]
            self.showfile()
    def showDialog(self):
        global fileName
        fileName = QtGui.QFileDialog.getOpenFileName(None, "Load Data", "/home/", "xml-files (*.xml)")
        self.showfile()
    def showfile(self):
        tree = etree.parse(fileName)
        root = tree.getroot()
      #... тут xml раскидывается по таблице
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MainWindow() 
    window.show()
    sys.exit(app.exec_())  
reclosedev
Patrik
мня немного смущает моя связка открытия файла диалогом и при перетаскивание файла.
Да, вместо глобальных переменных лучше использовать функции с параметрами или атрибуты экземпляра
class MainWindow(...):
  
   def showDialog(self):
        filename = ....
        if filename:
            self.showfile(filename)
  
   def showfile(self, filename):
        tree = etree.parse(filename)
        ...
или
class MainWindow(...):
    def __init__(...):
        ...
        self.filename = ""
  
    def showDialog(self):
        filename = ....
        if filename:
            self.filename = filename
   
  def showfile(self):
        tree = etree.parse(self.filename)
        ...

Patrik
Есть еще такой вопрос будет ли открываться с этим кодом xml файл если его ассоциировать или навести на выполняемый модуль ???
Попробуйте, вопрос то в чем?
Patrik
Проверил, к сожалению, если перетащить xml файл на test.py, то он в нем не открывается.
И ассоциация так же не работает. (((
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