Pyqt5 error message

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

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 и общие списки

Понравилась статья? Поделить с друзьями:
  • Pyqt error message
  • Pymysql err error already closed
  • Px4 ahrs error
  • Pwm9141 05 ошибка вольво
  • Pwg error incomplete session by timeout