Drag&Drop PyQt5

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
scorp
User
Beiträge: 5
Registriert: Sonntag 7. Februar 2021, 10:11

Ich habe ein Programm aus dem Internet genommen. Dieses ist Objektorientiert Programmiert. Dieses will ich in mein Programm integrieren.
Ich habe alle Felder nachgebaut und die Namen angepasst. Ich kann jedoch nichts per drop einfügen und der Speicherort wird im QLineEdite nicht angezeigt.
Hat jemand eine Idee an was dies liegen könnte?


import PyQt5.uic as uic
from mailmerge import MailMerge
from docx2pdf import convert
import sys, os, io
if hasattr(sys, 'frozen'):
os.environ['PATH'] = sys._MEIPASS + ";" + os.environ['PATH']
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QLineEdit, QPushButton, QListWidget, \
QVBoxLayout, QHBoxLayout, QGridLayout, \
QDialog, QFileDialog, QMessageBox, QAbstractItemView
from PyQt5.QtCore import Qt, QUrl
from PyQt5.QtGui import QIcon
from PyPDF2 import PdfFileMerger
from PyQt5 import QtCore, QtGui, QtWidgets

def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")

return os.path.join(base_path, relative_path)


class ListWidget(QListWidget):

####Layout ist unten im Layout beschrieben####

#def __init__(self, parent=None):
#super().__init__(parent)
#self.setAcceptDrops(True)
#self.setStyleSheet('''font-size:25px''')
#self.setDragDropMode(QAbstractItemView.InternalMove)
#self.setSelectionMode(QAbstractItemView.ExtendedSelection)

def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
return super().dragEnterEvent(event) # return to the original event state

def dragMoveEvent(self, event):
if event.mimeData().hasUrls():
event.setDropAction(Qt.CopyAction)
event.accept()
else:
return super().dragMoveEvent(event) # return to the original event state

def dropEvent(self, event):
if event.mimeData().hasUrls():
event.setDropAction(Qt.CopyAction)
event.accept()

pdfFiles = []

for url in event.mimeData().urls():
if url.isLocalFile():
if url.toString().endswith('.pdf'):
pdfFiles.append(str(url.toLocalFile()))
self.addItems(pdfFiles)
else:
return super().dropEvent(event) # return to the original event state

class output_field(QLineEdit):

####Layout ist unten im Layout beschrieben####

#def __init__(self):
#super().__init__()
#self.setMinimumHeight(50)
#self.height = 55
#self.setStyleSheet('''font-size: 30px;''')

#self.setFixedHeight(self.height)

def dragEnterEvent(self, event):
if event.mimeData().hasUrls:
event.accept()
else:
event.ignore()

def dragMoveEvent(self, event):
if event.mimeData().hasUrls:
event.setDropAction(Qt.CopyAction)
event.accept()
else:
event.ignore()

def dropEvent(self, event):
if event.mimeData().hasUrls:
event.setDropAction(Qt.CopyAction)
event.accept()

if event.mimeData().urls():
self.setText(event.mimeData().urls()[0].toLocalFile())
else:
event.ignore()

class Ui_Form(QWidget):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(746, 588)
self.gridLayout = QtWidgets.QGridLayout(Form)
self.gridLayout.setObjectName("gridLayout")
self.tabWidget = QtWidgets.QTabWidget(Form)
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.woistwalter = QtWidgets.QLineEdit(self.tab)
self.woistwalter.setGeometry(QtCore.QRect(22, 150, 391, 20))
self.woistwalter.setObjectName("woistwalter")
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.gridLayout_2 = QtWidgets.QGridLayout(self.tab_2)
self.gridLayout_2.setObjectName("gridLayout_2")
self.lineEdit_2 = QtWidgets.QLineEdit(self.tab_2)
self.lineEdit_2.setObjectName("lineEdit_2")
self.gridLayout_2.addWidget(self.lineEdit_2, 0, 0, 1, 3)
self.pushButton_save = QtWidgets.QPushButton(self.tab_2)
self.pushButton_save.setObjectName("pushButton_save")
self.gridLayout_2.addWidget(self.pushButton_save, 0, 3, 1, 1)
self.listWidget1 = QtWidgets.QListWidget(self.tab_2)
self.listWidget1.setObjectName("listWidget1")
self.gridLayout_2.addWidget(self.listWidget1, 1, 0, 1, 4)
self.pushButton_close = QtWidgets.QPushButton(self.tab_2)
self.pushButton_close.setObjectName("pushButton_close")
self.gridLayout_2.addWidget(self.pushButton_close, 2, 0, 1, 1)
self.pushButton_merge = QtWidgets.QPushButton(self.tab_2)
self.pushButton_merge.setObjectName("pushButton_merge")
self.gridLayout_2.addWidget(self.pushButton_merge, 2, 1, 1, 1)
self.pushButton_delete = QtWidgets.QPushButton(self.tab_2)
self.pushButton_delete.setObjectName("pushButton_delete")
self.gridLayout_2.addWidget(self.pushButton_delete, 2, 2, 1, 1)
self.pushButton_reset = QtWidgets.QPushButton(self.tab_2)
self.pushButton_reset.setObjectName("pushButton_reset")
self.gridLayout_2.addWidget(self.pushButton_reset, 2, 3, 1, 1)
self.tabWidget.addTab(self.tab_2, "")
self.gridLayout.addWidget(self.tabWidget, 0, 0, 1, 1)

####Nachträglich eingefügt von oben####

self.pushButton_save.clicked.connect(self.populateFileName)


self.listWidget1.setAcceptDrops(True)
self.listWidget1.setDragDropMode(QAbstractItemView.InternalMove)
self.listWidget1.setSelectionMode(QAbstractItemView.ExtendedSelection)
####bis hier eingefügt#### ^

self.retranslateUi(Form)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(Form)

def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Form", "Tab 1"))
self.pushButton_save.setText(_translate("Form", "Save To"))
self.pushButton_close.setText(_translate("Form", "Close"))
self.pushButton_merge.setText(_translate("Form", "Merge"))
self.pushButton_delete.setText(_translate("Form", "Delete"))
self.pushButton_reset.setText(_translate("Form", "Reset"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Form", "Tab 2"))



self.listWidget1 = ListWidget(self)
self.lineEdit_2 = output_field(self)
self.pushButton_delete.clicked.connect(self.deleteSelected)
self.pushButton_merge.clicked.connect(self.mergeFile)
self.pushButton_close.clicked.connect(QApplication.quit)
self.pushButton_reset.clicked.connect(self.clearQueue)

def deleteSelected(self):
for item in self.listWidget1.selectedItems():
self.listWidget1.takeItem(self.listWidget1.row(item))

def clearQueue(self):
self.listWidget1.clear()
self.lineEdit_2.setText('')

def populateFileName(self):
path = self._getSaveFilePath()
if path:
self.lineEdit_2.setText(path)

def dialogMessage(self, message):
dlg = QMessageBox(self)
dlg.setWindowTitle('PDF Manager')
dlg.setIcon(QMessageBox.Information)
dlg.setText(message)
dlg.show()

def _getSaveFilePath(self):
file_save_path, _ = QFileDialog.getSaveFileName(self, 'Save PDF file', os.getcwd(), 'PDF file (*.pdf)')
return file_save_path

def mergeFile(self):
if not self.lineEdit_2.text():
#self.dialogMessage('Save File directory is empty')
self.populateFileName()
return

if self.listWidget1.count() > 0:
pdfMerger = PdfFileMerger()

try:
for i in range(self.listWidget1.count()):
# print(self.listWidget1.item(i).text())
pdfMerger.append(self.listWidget1.item(i).text())

pdfMerger.write(self.lineEdit_2.text())
pdfMerger.close()

self.listWidget1.clear()
self.dialogMessage('PDF merge complete.')

except Exception as e:
self.dialogMessage(e)
else:
self.dialogMessage('Queue is empty')



if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Form = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())[/code]
Antworten