Seite 1 von 1

Drag and Drop Operationen einem Widget zuweisen

Verfasst: Mittwoch 3. April 2013, 10:16
von lackschuh
Hallo

Da ich die GUI mittels uic.loadUi in das Programm einbinde, habe ich eine Fragen:

Wie weise ich folgende Funktionen einem Widget zu?

Code: Alles auswählen

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

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

    def dropEvent(self, event):
        if event.mimeData().hasUrls():
            event.setDropAction(QtCore.Qt.CopyAction)
            event.accept()
            links = []
            for url in event.mimeData().urls():
                links.append(str(url.toLocalFile()))
            self.emit(QtCore.SIGNAL("dropped"), links)
            print links
            self.ui.listWidget.addItems(links)
        else:
            event.ignore()
Explizit handelt es sich um self.ui.listWidget. Geladen wird es über:

Code: Alles auswählen

class MeinDialog(QtGui.QMainWindow):
    def __init__(self, parent=None):
        
        self.dateien = []
        QtGui.QMainWindow.__init__(self)
        # UI Datei und Signale einrichten
        self.ui = uic.loadUi("gui.ui", self)
zZ Funktioniert das Drag&Drop schon, wird aber auf das komplette GUI angewandt.

Re: Drag and Drop Operationen einem Widget zuweisen

Verfasst: Montag 22. Juli 2013, 11:33
von Madmartigan
Du kannst prinzipiell die Funktionen des Widgets einfach mit den gewünschten Funktionen überschreiben.

Code: Alles auswählen

self.ui.listWidget.dragEnterEvent = self.custom_drag_enterevent

def custom_drag_enterevent(self, event):
    print "dragEnter"
Eher empfehlenswert wäre allerdings, ein eigenes Widget von QListWidget zu erben und dem die entsprechenden Funktionen zu geben. Um das im Designer verwenden zu können, müsstest du dann allerdings ein Plugin für dein Widget schreiben. Oder du platzierst in deiner UI einen Platzhalter mit dem Designer und ersetzt ihn code-seitig mit deinem eigenen Widget.

Re: Drag and Drop Operationen einem Widget zuweisen

Verfasst: Montag 22. Juli 2013, 13:02
von BlackJack
@lackschuh: Bei `uic.loadUi()` den Rückgabewert an ein Attribut zu binden *und* das zweite Argument zu übergeben macht keinen Sinn.

Re: Drag and Drop Operationen einem Widget zuweisen

Verfasst: Montag 22. Juli 2013, 13:52
von Madmartigan
BlackJack hat geschrieben:@lackschuh: Bei `uic.loadUi()` den Rückgabewert an ein Attribut zu binden *und* das zweite Argument zu übergeben macht keinen Sinn.
Idealerweise sei hinzugefügt, warum das keinen Sinn macht. :wink: Denn prinzipiell ist es ja nicht inkorrekt.

@lackschuh
Wenn du den zweiten Parameter (baseinstance) übergibst, wird dieser als Parent für deine UI verwendet. (natürlich vorausgesetzt der Parameter ist ein gültiges QWidget!)
Übergibst du also self mit, dann brauchst du den Rückgabewert von loadUi() nicht mehr in eine Variable schreiben. Du kannst alle Widgets deiner UI dann über self.widget_xyz ansprechen.

Re: Drag and Drop Operationen einem Widget zuweisen

Verfasst: Dienstag 23. Juli 2013, 08:39
von lackschuh
Liess ja lange auf eine Antwort warten :mrgreen: :mrgreen:
Das Tool ist eigentlich schon im Einsatz aber ich werde mir eure Tipps/Anregungen zu Herzen nehmen und es versuchen anzuwenden.

mfg

Re: Drag and Drop Operationen einem Widget zuweisen

Verfasst: Dienstag 23. Juli 2013, 09:02
von Madmartigan
lackschuh hat geschrieben:Liess ja lange auf eine Antwort warten :mrgreen: :mrgreen: mfg
Jau, bin erst seit Kurzem hier im Forum unterwegs. Hätten aber auch viele Andere beantworten können...