#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