2017-10-01 1 views
0

J'utilise python 3.6 et pyqt5 et charge ma fenêtre par self.ui = uic.loadUi("MainWindow.ui",self) Principalement il y a 2 QtreeViews et un Widgets QList. J'ai des problèmes avec dropEvent. Je dois le séparer à chaque Widget/modèle de sorte que j'ai différents "dropActions". Mais chaque fois que je laisse tomber, je reçois un appel du dropEvent Fonction du self.ui Object J'ai essayé de changer self.ui.treeView.viewport().installEventFilter(self) pour séparer les fonctions sans succès. Dans les docs et dans certains exemples trouvés ici et sur le net, il y a Widgets sous-classé avec les fonctions de glisser-déposer. Mais je ne trouve aucune solution pour les Widgets générés par le chargeur uic. J'ai essayé d'installer glisser & fonctions de baisse à l'intérieur des modèles. Mais pas de chance du tout.Sous-classe de Widgets qui sont chargés par uic.loadUi

Comment puis-je sous-classer un widget qui est chargé par uic.loadUi?

ou

Comment créer des règles d'où à où glisser & déposer est autorisée?

+0

Utilisez [uic.loadUiType] (http: // pyqt .sourceforge.net/Docs/PyQt5/designer.html # PyQt5.uic.loadUiType) pour générer une classe pouvant être sous-classée. – ekhumoro

Répondre

0

La manière la plus simple est de faire votre sous-classe au préalable.

Créer my_tree_view.py comme suit

from PyQt5 import QtWidgets, QtGui 

class MyTreeView(QtWidgets.QTreeView): 
    def __init__(self, parent=None): 
     super().__init__(parent) 

    def dropEvent(self, event: QtGui.QDropEvent): 
     print('MyTreeView dropEvent') 
     super().dropEvent(event) 

Vous pouvez alors modifier votre fichier .ui et ajoutez la ligne suivante à la fin après la ligne </widget>.

<customwidgets> 
    <customwidget> 
    <class>MyTreeView</class> 
    <extends>QTreeView</extends> 
    <header>my_tree_view</header> 
    </customwidget> 
</customwidgets> 

Et puis modifiez la ligne suivante (plus haut dans votre fichier .ui) de

<widget class="QTreeView" name="treeView"> 

à

<widget class="MyTreeView" name="treeView"> 
+0

Merci! Très difficile. Mais pas exactement ce que je cherche. J'ai essayé comme @ekhumoro dit, mais là je dois changer trop de choses. Le but est un problème avec les fonctionnalités de Drag & Drop. J'ai trouvé un autre moyen, mais je ne travaille toujours pas. – Hans