Разделенный байтовый массив

#python #python-2.7 #qt4 #pyqt4

#python #python-2.7 #qt4 #pyqt4

Вопрос:

В настоящее время я работаю над небольшим личным проектом, который позволяет пользователю перетаскивать элемент списка из QListWidget в PyQt4 на ярлык, который открывает диалоговое окно сообщения. Вы увидите, что selected comes выдает как заголовок, так и ссылку в обоих экземплярах. Как я могу просто получить доступ к отдельным элементам? Я стремлюсь получить первый элемент (заголовок) в заголовке диалогового окна, который является 2-м параметром метода about(), и показать вторую часть bytearray (ссылку) в главном диалоговом окне.

     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 "%sn%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:

Если 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
 

Комментарии:

1. Большое спасибо! Однако я получаю эту ошибку: Ошибка: TypeError ‘base’ не поддерживает индексацию — я добавил в рассматриваемый объект

2. Сначала я думал pickle.loads , что вернул кортеж, но он возвращает объект с двумя атрибутами. Вы должны получить к ним прямой доступ selected.name