python - 将项目放到 QComboBox 上?

标签 python python-3.x drag-and-drop pyqt5 qcombobox

也许我找错地方了,或者也许我不太完全理解这个概念;但我试图找到一个工作示例,在其中我可以将文本文件放在 QComboBox 上,它将触发我可以处理的放置事件。我浏览了文档,但没有关于该主题的大量信息。

我也查过,但也没有真正找到任何东西。如果我只是没有找对地方,请随时为我指出正确的方向。

最佳答案

您必须覆盖 dragEnterEvent 方法以启用接受的元素类型以及 dropEvent 方法,您将在其中获取有关拖动元素的信息。但为此,您必须使用 self.setAcceptDrops(True) 来启用该行为

import sys

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

class ComboBox(QComboBox):
    def __init__(self, *args, **kwargs):
        QComboBox.__init__(self, *args, **kwargs)
        self.setAcceptDrops(True)

    def dragEnterEvent(self, event):
         #print("formats: ", event.mimeData().formats())
        if event.mimeData().hasFormat("text/plain"):
            event.acceptProposedAction()

    def dropEvent(self, event):
        url = QUrl(event.mimeData().text().strip())
        if url.isLocalFile():
            file = QFile(url.toLocalFile())
            if file.open(QFile.ReadOnly|QFile.Text):
                ts = QTextStream(file)
                while not ts.atEnd():
                    print(ts.readLine())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = ComboBox()
    w.addItems(["item {}".format(i) for i in range(10)])
    w.show()
    sys.exit(app.exec_())

如果您需要更多信息,可以查看Qt documentation

关于python - 将项目放到 QComboBox 上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49100091/

相关文章:

jquery - 从外部可 knockout 排序拖放

python - 从数据存储加载数据集并合并到单个字典中。资源问题

python - cherrypy 无法使用多个服务器和多个端口按预期工作

python - 为 Python 安装 Bigfloat

python - 无法从 airflow pod 中提取 xcom - Kubernetes Pod Operator

python - 如何在python中的同一目录中的2个类之间进行相对导入?

python - 修改使用 from ... import * 导入的模块中的变量

python-3.x - 错误:import seaborn- while running the program : from . _ufuncs import * ImportError:DLL加载失败:找不到指定的模块

objective-c - NSOutlineView:拖动项目时避免出现黄色边框?

android - 停止 OnLongClickListener 在拖动时触发