In this article, we will discuss the Message Box Widget of the PyQT5 module. It is used to display the message boxes. PyQt5 is a library used to create GUI using the Qt GUI framework. Qt is originally written in C++ but can be used in Python. The latest version of PyQt5 can be installed using the command:
pip install PyQt5
What is a Message Box?
Message Boxes are usually used for declaring a small piece of information to the user. It gives users a pop-up box, that cannot be missed, to avoid important errors and information being missed by the users and in some cases, the user cannot continue without acknowledging the message box.
Based on the applications there are four types of message boxes. The following is the syntax for creating a message box. For any of the boxes, instantiation needs to be done.
Syntax:
msg_box_name = QMessageBox()
Now according to the requirement an appropriate message box is created.
Types of Message Box
Information Message Box
This type of message box is used when related information needs to be passed to the user.
Syntax:
msg_box_name.setIcon(QMessageBox.Information)
Question Message Box
This message box is used to get an answer from a user regarding some activity or action to be performed.
Syntax:
msg_box_name.setIcon(QMessageBox.Question)
Warning Message Box
This triggers a warning regarding the action the user is about to perform.
Syntax:
msg_box_name.setIcon(QMessageBox.Warning)
Critical Message Box
This is often used for getting the user’s opinion for a critical action.
Syntax:
msg_box_name.setIcon(QMessageBox.Critical)
Creating a simple Message Box using PyQt5
Now to create a program that produces a message box first import all the required modules, and create a widget with four buttons, on clicking any of these a message box will be generated.
Now for each button associate a message box that pops when the respective button is clicked. For this first, instantiate a message box and add a required icon. Now set appropriate attributes for the pop that will be generated. Also, add buttons to deal with standard mechanisms.
Given below is the complete implementation.
Program:
Python
import
sys
from
PyQt5.QtWidgets
import
*
def
window():
app
=
QApplication(sys.argv)
w
=
QWidget()
b1
=
QPushButton(w)
b1.setText(
"Information"
)
b1.move(
45
,
50
)
b2
=
QPushButton(w)
b2.setText(
"Warning"
)
b2.move(
150
,
50
)
b3
=
QPushButton(w)
b3.setText(
"Question"
)
b3.move(
50
,
150
)
b4
=
QPushButton(w)
b4.setText(
"Critical"
)
b4.move(
150
,
150
)
b1.clicked.connect(show_info_messagebox)
b2.clicked.connect(show_warning_messagebox)
b3.clicked.connect(show_question_messagebox)
b4.clicked.connect(show_critical_messagebox)
w.setWindowTitle(
"PyQt MessageBox"
)
w.show()
sys.exit(app.exec_())
def
show_info_messagebox():
msg
=
QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText(
"Information "
)
msg.setWindowTitle(
"Information MessageBox"
)
msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
retval
=
msg.exec_()
def
show_warning_messagebox():
msg
=
QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText(
"Warning"
)
msg.setWindowTitle(
"Warning MessageBox"
)
msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
retval
=
msg.exec_()
def
show_question_messagebox():
msg
=
QMessageBox()
msg.setIcon(QMessageBox.Question)
msg.setText(
"Question"
)
msg.setWindowTitle(
"Question MessageBox"
)
msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
retval
=
msg.exec_()
def
show_critical_messagebox():
msg
=
QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText(
"Critical"
)
msg.setWindowTitle(
"Critical MessageBox"
)
msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
retval
=
msg.exec_()
if
__name__
=
=
'__main__'
:
window()
Output
Here are the examples of the python api PyQt5.QtWidgets.QErrorMessage taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
5
Example 1
def handle_error(self, error):
"""Handle when an error occurs
Show the error in an error message window.
"""
em = QErrorMessage(self.main_window)
em.showMessage(error)
3
Example 2
def first_channel_changed(self, index):
self.parent().ui.actionStart.setChecked(False)
success, index = self.audiobackend.select_first_channel(index)
self.comboBox_firstChannel.setCurrentIndex(index)
if not success:
# Note: the error message is a child of the settings dialog, so that
# that dialog remains on top when the error message is closed
error_message = QtWidgets.QErrorMessage(self)
error_message.setWindowTitle("Input device error")
error_message.showMessage("Impossible to use the selected channel as the first channel, reverting to the previous one")
self.parent().ui.actionStart.setChecked(True)
3
Example 3
def second_channel_changed(self, index):
self.parent().ui.actionStart.setChecked(False)
success, index = self.audiobackend.select_second_channel(index)
self.comboBox_secondChannel.setCurrentIndex(index)
if not success:
# Note: the error message is a child of the settings dialog, so that
# that dialog remains on top when the error message is closed
error_message = QtWidgets.QErrorMessage(self)
error_message.setWindowTitle("Input device error")
error_message.showMessage("Impossible to use the selected channel as the second channel, reverting to the previous one")
self.parent().ui.actionStart.setChecked(True)
0
Example 4
def device_changed(self, index):
device = self.audiobackend.output_devices[index]
# save current stream in case we need to restore it
previous_stream = self.stream
previous_device = self.device
error_message = ""
self.logger.push("Trying to write to output device " + device['name'])
# first see if the format is supported by PortAudio
try:
success = self.audiobackend.is_output_format_supported(device, np.int16)
except Exception as exception:
self.logger.push("Format is not supported: " + str(exception))
success = False
if success:
try:
self.stream = self.audiobackend.open_output_stream(device, self.audio_callback)
self.device = device
self.stream.start()
if self.state not in [STARTING, PLAYING]:
self.stream.stop()
success = True
except OSError as error:
self.logger.push("Fail: " + str(error))
success = False
if success:
self.logger.push("Success")
previous_stream.stop()
else:
if self.stream is not None:
self.stream.stop()
# restore previous stream
self.stream = previous_stream
self.device = previous_device
# Note: the error message is a child of the settings dialog, so that
# that dialog remains on top when the error message is closed
error_message = QtWidgets.QErrorMessage(self.settings_dialog)
error_message.setWindowTitle("Output device error")
error_message.showMessage("Impossible to use the selected output device, reverting to the previous one. Reason is: " + error_message)
self.settings_dialog.combobox_output_device.setCurrentIndex(self.audiobackend.output_devices.index(self.device))
0
Example 5
def input_device_changed(self, index):
self.parent().ui.actionStart.setChecked(False)
success, index = self.audiobackend.select_input_device(index)
self.comboBox_inputDevice.setCurrentIndex(index)
if not success:
# Note: the error message is a child of the settings dialog, so that
# that dialog remains on top when the error message is closed
error_message = QtWidgets.QErrorMessage(self)
error_message.setWindowTitle("Input device error")
error_message.showMessage("Impossible to use the selected input device, reverting to the previous one")
# reset the channels
channels = self.audiobackend.get_readable_current_channels()
self.comboBox_firstChannel.clear()
self.comboBox_secondChannel.clear()
for channel in channels:
self.comboBox_firstChannel.addItem(channel)
self.comboBox_secondChannel.addItem(channel)
first_channel = self.audiobackend.get_current_first_channel()
self.comboBox_firstChannel.setCurrentIndex(first_channel)
second_channel = self.audiobackend.get_current_second_channel()
self.comboBox_secondChannel.setCurrentIndex(second_channel)
self.parent().ui.actionStart.setChecked(True)
5 ответов
Qt включает в себя класс диалога для сообщений об ошибках QErrorMessage
который вы должны использовать, чтобы ваш диалог соответствовал системным стандартам. Чтобы показать диалог, просто создайте объект диалога, затем вызовите .showMessage()
. Например:
error_dialog = QtWidgets.QErrorMessage()
error_dialog.showMessage('Oh no!')
Вот минимальный рабочий пример скрипта:
import PyQt5
from PyQt5 import QtWidgets
app = QtWidgets.QApplication([])
error_dialog = QtWidgets.QErrorMessage()
error_dialog.showMessage('Oh no!')
app.exec_()
mfitzp
24 окт. 2016, в 19:04
Поделиться
Все вышеперечисленные варианты не работали для меня, используя Komodo Edit 11.0. Просто вернул «1» или, если не был реализован «-1073741819».
Полезным для меня было: решение Ванлока.
def my_exception_hook(exctype, value, traceback):
# Print the error and traceback
print(exctype, value, traceback)
# Call the normal Exception hook after
sys._excepthook(exctype, value, traceback)
sys.exit(1)
# Back up the reference to the exceptionhook
sys._excepthook = sys.excepthook
# Set the exception hook to our wrapping function
sys.excepthook = my_exception_hook
ZF007
13 нояб. 2017, в 20:15
Поделиться
Следующее должно работать:
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText("Error")
msg.setInformativeText(e)
msg.setWindowTitle("Error")
Это не тот же тип сообщения (разные GUI), но довольно близко. e
— выражение для ошибки в python3
Надеюсь, что это помогло,
Narusan
24 окт. 2016, в 18:21
Поделиться
Не забудьте вызвать .exec() _ для отображения ошибки:
msg = QMessageBox()
msg.setIcon(QMessageBox.Critical)
msg.setText("Error")
msg.setInformativeText('More information')
msg.setWindowTitle("Error")
msg.exec_()
NShiell
08 янв. 2019, в 12:47
Поделиться
Чтобы показать окно сообщения, вы можете вызвать это определение:
from PyQt5.QtWidgets import QMessageBox
def clickMethod(self):
QMessageBox.about(self, "Title", "Message")
Karam Qusai
17 апр. 2019, в 10:06
Поделиться
Ещё вопросы
- 0Предпочтительный выбор и визуальный разделитель в Symfony 2
- 0Выпадающие меню в Firefox не появляются там, где они должны быть
- 0Соедините три таблицы с группой, указав ошибку
- 0Как отредактировать значение id_semester в соответствии с вводом, используя select?
- 1Получение всех ссылок на HostSystem от Datacenter за один запрос
- 1обратный вызов службы Android
- 0Поиск более одного столбца с использованием PHP для получения данных JSON
- 1Почему removeContent (), removeChild () и detach () не работают?
- 0как показать выбранное значение поля выбора?
- 0Ошибка почтовой программы PHPMAILER: сбой подключения SMTP () (нет доступа к Php.ini)
- 0Изображение, которое становится списком выбора на телефоне
- 1Как контролировать размер изображения при загрузке с URL с помощью C #
- 0Как отобразить URL изображения с подстраниц сайта, используя php код
- 1Datepicker отключает предыдущие и будущие даты неправильно
- 1Проверка БД на пустые записи
- 1Отображение URL Jax-RS API
- 1Тепловая карта matplotlib и seaborn визуализируется по-разному в Jupyter для сохранения (метки обрезаны)
- 1скрипт Google Apps подсчитывает символы в ячейке
- 0Разве текст не должен менять цвет после наведения «прямоугольника»?
- 0JQuery / JS для цикла, добавление переменной с другим конечным номером для разделения Div
- 0Как разделить div на 6?
- 1Модель гауссовой смеси — Сингулярная матрица
- 0Как перенаправить после самостоятельной публикации форму с атрибутами фильтра?
- 1Antlr: несоответствующий ввод начальный ожидающий идентификатор
- 0angular-translate не работает с шаблонами
- 1Плагин SonarQube Java — пример пользовательского правила с 4.1
- 0Как я могу использовать angularjs OrderBy и ng-repeat для последовательной итерации списка (10-секундные интервалы)?
- 1Рекурсивные компоненты в Vue JS
- 1Как скрыть свойство Items в пользовательском ComboBox
- 0Показать div в Image hover?
- 0Сервис имеет поддельную сервисную зависимость, которая возвращает обещание, борясь с тестированием
- 1Значение приращения из выражения
- 1Пользовательские ошибки компилятора через участников компиляции
- 0Получить текст внутри элемента, используя позицию курсора?
- 0Установите результаты SQL в эквивалент сессии
- 1Как обойти MAX_PATH в WinRT?
- 1BlobstoreService serve () не предоставляет Content-Length
- 1Использование лямбда-выражения для назначения данных ViewModel в запросе с использованием .Find ()
- 0PHP — Как я могу построить массив из 2 других массивов?
- 0чтение удваивается из файла .csv в C ++
- 1Pandas — удалить строку, содержащую Nan, а затем удалить все связанные строки
- 0Вкладка навигации остается определенного цвета
- 1Цвет TextView не меняется при клике
- 0Мой код перекошен в Outlook 2010
- 0Как я могу получить информацию о странице в Solr?
- 1Строка в Integer не работает
- 0Тайм-аут транспортира из-за $ timeout и $ interval
- 1Как добраться до контекста приложения без использования скриптов в файлах JSP?
- 1DataContractSerializer и общие списки