powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Как в PyQt работать с указателями?
5 сообщений из 5, страница 1 из 1
Как в PyQt работать с указателями?
    #39770229
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фреймоворк 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
Как в PyQt работать с указателями?
    #39770254
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlekseySQLНаверное есть какое- то общее правило работы с указателями, по которому была составлена библиотека PyQt. И почему- то я нигде его не нашел...
Опять 25.
В плюсовом коде, при обращении к nullptr'у, который вернул бы QApplication::style() ты бы получил крэш.
В питоновом это обёрнуто дополнительными врапперами, и если метод возвращает None, значит, плюсовый статик метод QApplication::style() вернул nullptr.
/thread
...
Рейтинг: 0 / 0
Как в PyQt работать с указателями?
    #39770288
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NekZAlekseySQLНаверное есть какое- то общее правило работы с указателями, по которому была составлена библиотека PyQt. И почему- то я нигде его не нашел...
Опять 25.
В плюсовом коде, при обращении к nullptr'у, который вернул бы QApplication::style() ты бы получил крэш.
В питоновом это обёрнуто дополнительными врапперами, и если метод возвращает None, значит, плюсовый статик метод QApplication::style() вернул nullptr.
/thread

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

И все - таки по теме: у меня есть догадка, что все указатели заменяются ссылками. Верно?
...
Рейтинг: 0 / 0
Как в PyQt работать с указателями?
    #39770339
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я слегка глюканул и не разглядел, что в коде С++ идет обращение к синглтону:
Код: 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
Как в PyQt работать с указателями?
    #39770494
AlekseySQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо!

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


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