微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决pyqt5在两个listwidget之间拖放listitem消失

我有一个带有两个 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)
      
      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_())       

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。