Гость
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как в PyQt работать с указателями? / 5 сообщений из 5, страница 1 из 1
06.02.2019, 15:36
    #39770229
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в PyQt работать с указателями?
Фреймоворк Qt изначально создавался для С++ и потому изобилует указателями (как в виде параметров метода, так и в виде возвращаемых значений). Но в Python нет никаких указателей, поэтому непонятно как писать код при использовании библиотеки PyQt.

Например в С++ я так получал иконку:
Код: plaintext
1.
Information  = QIcon(QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation));



А в Python я пробую это сделать так:
from PyQt5 import QtGui
from PyQt5.QtWidgets import QApplication, QStyle

Код: python
1.
Information = QtGui.QIcon(QApplication.style().standardIcon(QStyle.SP_MessageBoxInformation))



, но получаю ошибку (как раз в том месте, где в С++ я обращался к методу указателя!):
Код: plaintext
1.
Information = QtGui.QIcon(QApplication.style().standardIcon(QStyle.SP_MessageBoxInformation))
AttributeError: 'NoneType' object has no attribute 'standardIcon'

Наверное есть какое- то общее правило работы с указателями, по которому была составлена библиотека PyQt. И почему- то я нигде его не нашел...
...
Рейтинг: 0 / 0
06.02.2019, 16:17
    #39770254
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в PyQt работать с указателями?
AlekseySQLНаверное есть какое- то общее правило работы с указателями, по которому была составлена библиотека PyQt. И почему- то я нигде его не нашел...
Опять 25.
В плюсовом коде, при обращении к nullptr'у, который вернул бы QApplication::style() ты бы получил крэш.
В питоновом это обёрнуто дополнительными врапперами, и если метод возвращает None, значит, плюсовый статик метод QApplication::style() вернул nullptr.
/thread
...
Рейтинг: 0 / 0
06.02.2019, 16:49
    #39770288
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в PyQt работать с указателями?
NekZAlekseySQLНаверное есть какое- то общее правило работы с указателями, по которому была составлена библиотека PyQt. И почему- то я нигде его не нашел...
Опять 25.
В плюсовом коде, при обращении к nullptr'у, который вернул бы QApplication::style() ты бы получил крэш.
В питоновом это обёрнуто дополнительными врапперами, и если метод возвращает None, значит, плюсовый статик метод QApplication::style() вернул nullptr.
/thread

Спасибо, у меня раньше не было таких ошибок, поэтому я решил, что указатель не смог корректно отобразиться в объект Python и получил значение None.

И все - таки по теме: у меня есть догадка, что все указатели заменяются ссылками. Верно?
...
Рейтинг: 0 / 0
06.02.2019, 17:58
    #39770339
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в PyQt работать с указателями?
Я слегка глюканул и не разглядел, что в коде С++ идет обращение к синглтону:
Код: plaintext
1.
QApplication::style()



Поэтому переделал так:
Код: python
1.
2.
3.
4.
IconsOfMessages = {}
IconsOfMessages['Information'] = QtWidgets.QApplication.instance().style().standardIcon(QStyle.SP_MessageBoxInformation)
IconsOfMessages['Warning'] = QtWidgets.QApplication.instance().style().standardIcon(QStyle.SP_MessageBoxWarning)
IconsOfMessages['Critical'] = QtWidgets.QApplication.instance().style().standardIcon(QStyle.SP_MessageBoxCritical)



Но так как я обращаюсь к инстансу QApplication, то этот код работает только после выполнения main (где создается инстанс) и потому может быть только в экземплярах объектов (нельзя, например, создать перечисление с картинками). Сейчас я при создании экземпляра события, для которого нужны эти иконки, анализирую заполненность коллекции с иконами (хранящейся как атрибут этого класса) и если это первое обращение, то заполняю ее.

А есть какой- то более симпатичный способ получить заполненную коллекцию без постоянных проверок?
...
Рейтинг: 0 / 0
07.02.2019, 08:02
    #39770494
AlekseySQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в PyQt работать с указателями?
Всем спасибо!

Принял решение явно все прописать при создании главного окна (когда экземпляр уже QAplication создан), чтобы все был понятно без всякой магии. Теперь человек, читающий код, увидит, что при начале работы программы создаются общие объекты (а не где- то глубоко расположены какие- то кульбиты).
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как в PyQt работать с указателями? / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]