pyqt5在两个listwidget之间拖放listitem消失

时间:2021-03-29 20:24:46

标签: python drag-and-drop pyqt5 qlistwidget

我有一个带有两个 QListWidgets 的简单应用

我想:

  1. 在它们之间拖放
  2. 重新排列其中的顺序。

问题:当我尝试在其中一个 QListWidgets 中重新排列顺序时,QListItem 消失了。
这是一个小例子(我使用的是python3)

import sys

from PyQt5 import QtCore,  QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtCore import Qt


class DragWidget(QtWidgets.QListWidget) :
   def __init__(self,parent,total=None) :
      super(DragWidget,self).__init__(parent)     
      self.setSizePolicy(QtWidgets.QSizePolicy.Expanding,
         QtWidgets.QSizePolicy.Minimum)
      
      #Want horizontal listwidgets.
      self.setFlow(QtWidgets.QListView.Flow.LeftToRight)
      
      #Here's the attempt to configure dragging.
      self.setDragEnabled(True)
      self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
      self.setDropIndicatorShown(True) 
      self.setDefaultDropAction(Qt.MoveAction)
      self.viewport().setAcceptDrops(True)  
     
      self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)     
      self.setResizeMode(QtWidgets.QListView.ResizeMode.Adjust)      
      self.setSpacing(2)
      self.setFixedHeight(50)

   #An attempt to overload the dragEnterEvent
   def dragEnterEvent(self,event) :
      #Use the InternalMove if the source = the drop site
      if (event.source() is self):        
         self.setDragDropMode(QtWidgets.QAbstractItemView.InternalMove)
      else :
         #And regular ol' DragDrop if not.
         self.setDragDropMode(QtWidgets.QAbstractItemView.DragDrop)
      super().dragEnterEvent(event)

class DragDemo(QtWidgets.QDialog) :
   def __init__(self,parent=None,*args,**kwargs) :
      super().__init__()
   
      layout = QtWidgets.QGridLayout()
      groupbox = QtWidgets.QGroupBox("Display Columns")
      groupbox.setLayout(layout)

      showlist = DragWidget(groupbox)     
      options = ['type','name','timestamp']
      itemlist = []
      for option in options :       
         item = QtWidgets.QListWidgetItem(option,showlist)
         itemlist.append(item)          
      layout.addWidget(showlist,0,0)
      
      hidelist = DragWidget(groupbox)
      layout.addWidget(hidelist,1,0)
      
      vlayout = QtWidgets.QVBoxLayout()
      vlayout.addWidget(groupbox)
      
      self.setLayout(vlayout)
      self.show()

app = QApplication(sys.argv)
demo = DragDemo() 
demo.show()
sys.exit(app.exec_())       

谁能告诉我我做错了什么? 任何和所有帮助表示赞赏。

0 个答案:

没有答案