Как удалить значок из QMessageBox в PyQt5?

Я пытаюсь закодировать окно сообщения, которое просто всплывает и говорит что-то и имеет одну кнопку, чтобы закрыть его, однако, поскольку у меня есть только небольшой текст в поле, значок / изображение слева от него огромны и выглядят плохо . Я хочу знать, как это удалить. У меня также возникают проблемы с созданием пользовательских окон сообщений. В руководствах говорится, что вы можете создать собственное окно сообщения следующим образом:

box = QMessageBox()
box.setText('text')
box.addButton(QPushButton('Close', self))
box.exec_()

Однако это просто закрывает мою программу и возвращает 1. В моем текущем коде используется метод about QMessageBox ():

box = QMessageBox().about(self, 'About', 'This is a test Program')

Однако у этого есть этот большой значок в текстовом окне, и я не могу ничего сделать с полем, поскольку он просто останавливает программу и снова возвращает 1

Мне отчаянно нужна достойная документация PyQt. Кажется, я вообще не могу найти документацию, если она не на C ++. Например, я не могу найти никакой информации о вариантах, кроме вопроса и о QmessageBox. Так что, если бы кто-то мог также показать мне, где живет какая-то соответствующая документация, это не позволило бы мне задать здесь слишком много вопросов.


person John O'Neil    schedule 04.01.2017    source источник


Ответы (1)


Вместо документации PyQt лучше напрямую использовать документацию Qt. Вам нужно только переключить свое языковое мышление с Python на C ++, туда и обратно. Это не так уж и сложно. :) См., Например, http://doc.qt.io/qt-4.8/qmessagebox.html#addButton или http://doc.qt.io/qt-4.8/qmessagebox.html#about Я думаю, что это очень подробная документация, не имеющая аналогов в большинстве других фреймворков.

Обратите внимание, что есть три переопределения addButton(). Из документации кажется, что вам нужно либо передать два аргумента box.addButton(QPushButton('Close', self), QMessageBox.RejectRole) (вы забыли роль!), Или, что лучше, вы используете переопределение, которое использует стандартные кнопки, а затем вы передаете только один аргумент: box.addButton(QMessageBox.Close).

И еще один совет: мне также легче отлаживать мою программу с PySide, чем с PyQt, потому что, в отличие от PyQt, PySide улавливает исключение, выводит его на консоль и продолжает работать. В то время как PyQt обычно просто тихо вылетает, оставляя вас в неведении. В большинстве случаев я использую прокладки Qt.py https://pypi.python.org/pypi/Qt.py/0.6.9 или qtpy https://pypi.python.org/pypi/QtPy, чтобы иметь возможность переключаться с PyQt на PySide на лету. Он также позволяет легко переключаться между Qt4 и Qt5 привязками.

person V.K.    schedule 04.01.2017
comment
Проблема в том, что я очень мало знаю C ++. Я пытался изучить его много лет назад, но так и не смог далеко уйти. Я также был обеспокоен возможными различиями между ними. Правильно, поэтому он работает с ролью, и это здорово, однако мой текст и кнопка, похоже, выровнены по правому краю в поле. Каким способом можно изменить свое положение? Можно ли не убрать иконку из встроенного лайка вопрос или про? - person John O'Neil; 04.01.2017
comment
Но для понимания этой документации вам не нужен C ++. Просто замените :: на ., и все. :) Согласно документам, кажется, что значок не может быть изменен в окне сообщения «о», если вы не измените значок приложения или значок родительского окна. Если вы создали свой собственный значок приложения, возможно, вам просто нужно использовать его уменьшенную версию (скажем, 128x128 пикселей или что-то в этом роде). Лично я считаю, что в окошке «О нас» есть логотип приложения. - person V.K.; 04.01.2017
comment
Вы можете легко перехватить исключения в PyQt, установив sys.excepthook. Но я согласен с VK, что вам не нужно знать C ++, чтобы разобраться в документации, все имена классов, функций и аргументов идентичны, все, что вам нужно сделать, это игнорировать типы. Примеры, как правило, немного сложнее перевести, но Pyqt поставляется с большим количеством примеров, переведенных с C ++ на Python. - person Oliver; 04.01.2017
comment
Хорошо, тогда это работает для меня. После некоторого исследования я думаю, что перейду на pyside. В писайде все по сути то же самое? Могу ли я по-прежнему использовать эти документы, потому что это работает для меня. Меня больше всего беспокоили различия в том, как они работают - person John O'Neil; 04.01.2017
comment
Самый большой недостаток PySide в том, что на данный момент он позволяет только Qt4, и это ДЕЙСТВИТЕЛЬНО ПЛОХО, если вы хотите, чтобы ваша программа была ориентирована на будущее. В настоящее время идет PySide2 проект, но вы должны скомпилировать его самостоятельно (я слышал, что предварительно скомпилированные двоичные файлы доступны в Ubuntu 15.xx или 16.xx, но я не могу это проверить). Лучшее решение - использовать прокладки, о которых я упоминал в ответе выше. Они позволяют вам развиваться так, как если бы вы использовали Qt5 (хотя на самом деле использовали Qt4 в фоновом режиме), и легко переключаться на PySide2 позже, когда это станет доступно. - person V.K.; 04.01.2017
comment
Спасибо Schollii за указание на sys.excepthook. Это действительно полезно. - person V.K.; 04.01.2017
comment
На самом деле это ошибка, из-за которой PySide продолжает работать после необработанного исключения - обычный скрипт python никогда не будет вести себя таким образом. В PyQt4 тоже была эта ошибка, но она была исправлена ​​в PyQt5. - person ekhumoro; 04.01.2017
comment
@ JohnO'Neil, ты говоришь, после некоторого исследования, ... Я перейду на pyside, каковы твои причины? PyQt идет в ногу с Qt и очень удобен, в то время как Pyside застопорился (так как мне нравятся проекты с открытым исходным кодом, в Qt происходит много важных изменений, которые вы, по крайней мере, должны иметь возможность использовать). - person Oliver; 06.01.2017
comment
@Schollii Могут возникнуть проблемы с лицензированием. PySide - это LGPL, а PyQt - это GPL или коммерческий. Несмотря на то, что в Qt недавно было добавлено много нового, если вы разрабатываете приложение на основе виджетов, вам фактически не понадобится большая часть нового материала. Кстати. PySide2 уже в пути ... - person V.K.; 07.01.2017