链接:https://pan.baidu.com/s/1k5xM_agOGMfHvhTfZnDXmg
提取码:88k5
import sys
from PyQt5.QtWidgets import (QApplication,QWidget,QAbstractItemView,QTreeWidgetItem,QListWidget,QTreeWidget,QTableWidget)
from PyQt5 import QtCore
from PyQt5.QtCore import pyqtSlot,Qt,QEvent
from ui_widget import Ui_Widget
class QmyWidget(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.ui=Ui_Widget()
self.ui.setupUi(self)
self.ui.listSource.installEventFilter(self)
self.ui.listWidget.installEventFilter(self)
self.ui.treeWidget.installEventFilter(self)
self.ui.tableWidget.installEventFilter(self)
self.ui.listSource.setAcceptDrops(True)
self.ui.listSource.setDragDropMode(QAbstractItemView.DragDrop)
self.ui.listSource.setDragEnabled(True)
self.ui.listSource.setDefaultDropAction(Qt.CopyAction)
self.ui.listWidget.setAcceptDrops(True)
self.ui.listWidget.setDragDropMode(QAbstractItemView.DragDrop)
self.ui.listWidget.setDragEnabled(True)
self.ui.listWidget.setDefaultDropAction(Qt.MoveAction)
self.ui.treeWidget.setAcceptDrops(True)
self.ui.treeWidget.setDragDropMode(QAbstractItemView.DragDrop)
self.ui.treeWidget.setDragEnabled(True)
self.ui.treeWidget.setDefaultDropAction(Qt.MoveAction)
self.ui.tableWidget.setAcceptDrops(True)
self.ui.tableWidget.setDragDropMode(QAbstractItemView.DragDrop)
self.ui.tableWidget.setDragEnabled(True)
self.ui.tableWidget.setDefaultDropAction(Qt.MoveAction)
self.__itemView=None#用于设置属性的当前组件
self.on_radioSource_clicked()#调用一次槽函数,初始化界面
#==============4个radioButton按钮的槽函数===========
@pyqtSlot()
def on_radioSource_clicked(self):
self.__itemView=self.ui.listSource
self.__refreshToUI()
@pyqtSlot()
def on_radioList_clicked(self):
self.__itemView=self.ui.listWidget
self.__refreshToUI()
@pyqtSlot()
def on_radioTree_clicked(self):
self.__itemView=self.ui.treeWidget
self.__refreshToUI()
@pyqtSlot()
def on_radioTable_clicked(self):
self.__itemView=self.ui.tableWidget
self.__refreshToUI()
#=============自定义函数==================
def __refreshToUI(self):
self.ui.chkBoxAcceptDrops.setChecked(self.__itemView.acceptDrops())
self.ui.chkBoxDragEnabled.setChecked(self.__itemView.dragEnabled())
self.ui.comboMode.setCurrentIndex(self.__itemView.dragDropMode())
index=self.__getDropActionIndex(self.__itemView.defaultDropAction())
self.ui.comboDefaultAction.setCurrentIndex(index)
def __getDropActionIndex(self,actionType):
if actionType==Qt.CopyAction:
return 0
elif actionType==Qt.MoveAction:
return 1
elif actionType==Qt.LinkAction:
return 2
elif actionType==Qt.IgnoreAction:
return 3
else:
return 0
#=============用于属性设置的4个组件的槽函数===================
@pyqtSlot(bool)
def on_chkBoxAcceptDrops_clicked(self,checked):
self.__itemView.setAcceptDrops(checked)
@pyqtSlot(bool)
def on_chkBoxDragEnabled_clicked(self,checked):
self.__itemView.setDragEnabled(checked)
@pyqtSlot(int)
def on_comboMode_currentIndexChanged(self,index):
mode=(QAbstractItemView.DragDropMode)(index)
self.__itemView.setDragDropMode(mode)
@pyqtSlot(int)
def on_comboDefaultAction_currentIndexChanged(self,index):
actionType=self.__getDropActionType(index)
self.__itemView.setDefaultDropAction(actionType)
def __getDropActionType(self,index):
if index==0:
return Qt.CopyAction
elif index==1:
return Qt.MoveAction
elif index==2:
return Qt.LinkAction
elif index==3:
return Qt.IgnoreAction
else:
return Qt.CopyAction
def eventFilter(self,watched,event):
if(event.type()==QEvent.KeyPress and event.key()==Qt.Key_Delete):
if(watched==self.ui.listSource):
self.ui.listSource.takeItem(self.ui.listSource.currentRow())
elif(watched==self.ui.listWidget):
self.ui.listWidget.takeItem(self.ui.listWidget.currentRow())
elif(watched==self.ui.treeWidget):
curItem=self.ui.treeWidget.currentItem()
if(curItem.parent()!=None):
parItem=curItem.parent()
parItem.removeChild(curItem)
else:
index=self.ui.treeWidget.indexOfTopLevelItem(curItem)
self.ui.treeWidget.takeTopLevelItem(index)
elif(watched==self.ui.tableWidget):
self.ui.tableWidget.takeItem(self.ui.tableWidget.currentRow(),self.ui.tableWidget.currentColumn())
return super().eventFilter(watched,event)
if __name__=="__main__":
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)#自适应缩放
app=QApplication(sys.argv)
form=QmyWidget()
form.show()
sys.exit(app.exec_())