Уведомления

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

#1 Ноя. 1, 2012 18:04:40

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

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

Сделал мини пример:
первый файл то, что с генерировал 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_())  

Почему-то перетаскивание не работает, хотя вроде все правильно.



Офлайн

#2 Ноя. 1, 2012 19:12:31

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

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

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MainWindow() # !!!
    window.show()  # !!!
    sys.exit(app.exec_())  

Офлайн

#3 Ноя. 2, 2012 18:15:37

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

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

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

Есть еще такой вопрос будет ли открываться с этим кодом 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_())  



Офлайн

#4 Ноя. 2, 2012 18:30:51

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

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

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 файл если его ассоциировать или навести на выполняемый модуль ???
Попробуйте, вопрос то в чем?

Офлайн

#5 Ноя. 6, 2012 11:04:26

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

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

Проверил, к сожалению, если перетащить xml файл на test.py, то он в нем не открывается.
И ассоциация так же не работает. (((



Офлайн

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

Board footer

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

Powered by DjangoBB

Lo-Fi Version