2017-01-04 12 views
0

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

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

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

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

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

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

ответ

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.pyhttps://pypi.python.org/pypi/Qt.py/0.6.9 или qtpyhttps://pypi.python.org/pypi/QtPy, чтобы иметь возможность переключаться с PyQt на PySide на лету. Он также позволяет легко переключаться между Qt4 и Qt5 креплениями.

+0

Проблема в том, что я знаю очень мало C++. Я пытался научиться этому много лет назад, но никогда не уходил далеко. Я также был обеспокоен возможными различиями между ними. Правильно, поэтому он отлично работает, но мой текст и кнопка, похоже, выровнены прямо сейчас. Каков способ изменения их положения? Может ли значок не удаляться из встроенного подобного вопроса или около? –

+0

Но вам не нужен C++, чтобы понять эту документацию. Просто замените '::' на '.', и все. :) Согласно документам, кажется, что значок не может быть изменен в поле сообщения «about», если вы не измените значок приложения или значок родительского окна. Если вы создали свой собственный значок приложения, вам может понадобиться только небольшая версия (скажем, 128x128 пикселей или что-то в этом роде). Я лично считаю, что неплохо иметь логотип приложения в окне. –

+3

Вы можете легко ловить исключения в PyQt, установив sys.excepthook. Но я согласен с VK, что вам не нужно знать C++ для определения документов, все имена классов, функций и arg идентичны, все, что вам нужно сделать, это игнорировать типы. Примеры, как правило, немного сложнее перевести, но Pyqt поставляется с большим количеством примеров, переведенных с C++ на Python. – Schollii