PyQT 拖放事件(一)

2019-08-14 16:16:03 浏览数 (1)

许多PyQt窗口部件都支持拖放操作,如QColumnView,QHeaderView, QListView, QTableView 和 QTreeView,我们要做的只是打开支持模式使其工作即可。

.setDragEnabled(True) #设置为可拖动

.setAcceptDrops(True) #设置为可放下,只有“放下”是从QWidget继承而来

这种方式的拖放行为是复制,而不是移动。

如下的程序有两个列表控件(QListView),左边的列表控件使用默认模式,右边的列表控件使用图标模式。项目(QListWidgetItem)可以在它们之间拖放复制。

代码如下:

代码语言:javascript复制
import sys
from PyQt5.QtWidgets import QWidget, QApplication, QListWidget, QHBoxLayout,
     QListWidgetItem
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt, QSize

class Widget(QWidget):
    def __init__(self, parent = None):
        super().__init__(parent)
        self.setWindowTitle("拖放事件示例")
        listWidget = QListWidget()
        listWidget.setAcceptDrops(True)  #设置为可放下
        listWidget.setDragEnabled(True)  #设置为可拖动
        iconList = ["英短", "布偶", "折耳", "波斯", "缅因", "森林"]
        for i in iconList:
            listWidget.addItem(QListWidgetItem(QIcon(i   ".jpg"), i))

        iconListWidget = QListWidget()
        iconListWidget.setViewMode(QListWidget.IconMode)  #设置为图标模式
        iconListWidget.setIconSize(QSize(100, 100)) #可设置图标大小
        iconListWidget.setAcceptDrops(True)  #设置为可放下
        iconListWidget.setDragEnabled(True)  #设置为可拖动
        layout = QHBoxLayout()
        layout.addWidget(listWidget)
        layout.addWidget(iconListWidget)
        self.setLayout(layout)
  
if __name__ == '__main__':
    app = QApplication(sys.argv)
    mw = Widget()
    mw.show()
    sys.exit(app.exec_())

这样的内置拖放功能非常方便,通常也足够实用。不过,如果需要使其能够处理自定义数据,或者,就必须重新实现一些事件处理程序。

0 人点赞