拆分字节数组

1 投票
1 回答
746 浏览
提问于 2025-04-18 11:12

我现在正在做一个小项目,这个项目允许用户把QListWidget里的列表项拖到一个标签上,然后会弹出一个消息对话框。你会看到selected在这两种情况下都能产生标题和链接。我想知道怎么才能只获取单独的元素?我的目标是把第一个元素(标题)放在对话框的标题栏里,这个标题是about()方法的第二个参数,然后把字节数组的第二部分(链接)显示在主对话框里。

    def dropEvent(self, event):
        data = event.mimeData()
        bstream = data.retrieveData("application/x-feed", QtCore.QVariant.ByteArray)
        selected = pickle.loads(bstream.toByteArray())
        event.accept()
        QtGui.QMessageBox.about(self, str(selected),
""" %s """ % str(selected)
)

编辑

class base(object):
    def __init__(self, name, link):
        self.name = name
        self.link = link

    def __repr__(self):
        return "%s\n%s" % (self.name, self.link)

错误:TypeError 'base' 不支持索引

到目前为止的背景阅读: http://srinikom.github.io/pyside-docs/PySide/QtCore/QMimeData.html https://docs.python.org/3.1/library/functions.html

任何帮助都非常感谢!

1 个回答

0

如果 pickle.loads 返回的是一个元组,那么你可以使用这个语法:

(title,link) = pickle.loads(bstream.toByteArray())

或者

selected = pickle.loads(bstream.toByteArray())
title = selected[0]
link = selected[1]

编辑

我最开始以为 pickle.loads 返回的是一个元组,但其实它返回的是一个 base 对象,这个对象有两个属性,所以你只需要访问这些属性就可以了(记住,Python里没有私有属性):

selected = pickle.loads(bstream.toByteArray())
title = selected.name
link = selected.link

撰写回答