IronPython / PythonNET - MessageBox


Mostrar mensajes al usuario en aplicaciones IronPython / PythonNET

Para mostrar mensajes al usuario en tus aplicaciones IronPython o PythonNET debes utilizar System.Windows.Forms.MessageBox.Show.

MessageBox.Show recibe parámetros posicionales que definen respectivamente el texto, título, botones, icono y opciones del mensaje (también puede especificarse si se desea que se muestre el botón ayuda, pero como no es compatible con todas las combinaciones posibles del resto de parámetros omitiremos esta opción).

El mensaje mas sencillo que podemos mostrar es uno como el siguiente:

# -*- coding: utf-8 -*-

import clr

clr.AddReference('System.Windows.Forms')

from System.Windows.Forms import *

MessageBox.Show('Texto del mensaje')

Este código muestra el siguiente mensaje:

MessageBox 01

Pero normalmente también indicaremos el título del mensaje, que es el segundo parámetro de posición:

MessageBox.Show('Texto del mensaje', 'Título del mensaje')

Ahora el mensaje se ve así:

MessageBox 02

Podríamos haber creado el mismo mensaje del siguiente modo:

MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK)

Ya que, por defecto, el mensaje solamente muestra un botón Aceptar, tal como el que define MessageBoxButtons.OK.

Al cerrar el MessageBox, este devuelve un resultado:

# -*- coding: utf-8 -*-

import clr

clr.AddReference('System.Windows.Forms')

from System.Windows.Forms import *

result = MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK)

print(result) # System.Windows.Forms.DialogResult.OK

En este caso, tanto si el usuario cierra el mensaje haciendo click en X o en el botón Aceptar, el valor devuelto es DialogResult.OK. En otras palabras, en este caso el usuario no tiene opciones y el mensaje es de caracter informativo.

A continuación vamos a ver las distintas combinaciones de parámetros que podemos hacer para crear distintos mensajes.


MessageBoxButtons

Podemos utilizar los siguies sets de botones para nuestros MessageBox:

A excepción de los mensajes creados con MessageBoxButtons.OK, siempre que se presione X es como haber presionado el botón Cancelar. Por otra parte, para los mensajes creados con MessageBoxButtons.YesNo o con MessageBoxButtons.AbortRetryIgnore el botón X está deshabilitado.

MessageBoxButtons.OK

Ya lo hemos visto:

result = MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK)

print(result) # System.Windows.Forms.DialogResult.OK

MessageBox 02

En este caso el usuario no tiene opciones, y el MessageBox siempre devuelve DialogResult.OK.

MessageBoxButtons.OKCancel

result = MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OKCancel)

MessageBox 03

En este caso, si se cierra el mensaje haciendo click en Aceptar, devuelve DialogResult.OK. Pero si se hace click en Cancelar o en X, devuelve DialogResult.Cancel.

MessageBoxButtons.YesNo

result = MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.YesNo)

MessageBox 04

En este caso, el botón X está deshabilitado. Según el botón pulsado se devolverá DialogResult.Yes o DialogResult.No.

MessageBoxButtons.RetryCancel

result = MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.RetryCancel)

MessageBox 05

El valor devuelto puede ser DialogResult.Retry o DialogResult.Cancel.

MessageBoxButtons.YesNoCancel

result = MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.YesNoCancel)

MessageBox 06

El valor devuelto puede ser DialogResult.Yes, DialogResult.No o DialogResult.Cancel.

MessageBoxButtons.AbortRetryIgnore

result = MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.AbortRetryIgnore)

MessageBox 07

En este caso, el botón X está deshabilitado. El valor devuelto puede ser DialogResult.Abort, DialogResult.Retry o DialogResult.Cancel.


MessageBoxIcon

Podríamos haber creado cualquiera de los mensajes anteriores añadiendo un cuarto parámetro posicional. Por ejemplo:

MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.None)

El cuarto parámetro indica el icono que muestra el mensaje. MessageBoxIcon.None indica que no debe mostrarse ningún icono.

Estos son los iconos que podemos utilizar:

MessageBoxIcon.Question

MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.Question)

MessageBox 08

MessageBoxIcon.Information

MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.Information)

MessageBox 09

Obtendríamos el mismo resultado con MessageBoxIcon.Asterisk.

MessageBoxIcon.Warning

MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.Warning)

MessageBox 10

Obtendríamos el mismo resultado con MessageBoxIcon.Exclamation.

MessageBoxIcon.Error

MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.Error)

MessageBox 11

Obtendríamos el mismo resultado con MessageBoxIcon.Hand y con MessageBoxIcon.Stop.


MessageBoxDefaultButton

Cualquiera de los mensajes anteriores podrían haberse creado indicando el quinto parámetro de posición, que especifica cual es el botón por defecto. El botón por defecto es aquel que tiene el foco al crearse el mensaje, de manera que si se presiona la tecla Enter se acciona el botón.

Por ejemplo:

MessageBox.Show(
    'Texto del mensaje',
    'Título del mensaje',
    MessageBoxButtons.OKCancel,
    MessageBoxIcon.None,
    MessageBoxDefaultButton.Button2
    )

En este caso, el botón por defecto es Cancel, el segundo botón de derecha a izquierda.

Podemos utilizar:

Curiosamente, si el número de botones es inferior al indicado como botón por defecto no se produce ningún error, de manera que el siguiente código es válido:

MessageBox.Show(
    'Texto del mensaje',
    'Título del mensaje',
    MessageBoxButtons.OKCancel,
    MessageBoxIcon.None,
    MessageBoxDefaultButton.Button3
    )

Como no existe el tercer botón, el primer botón es el que toma el foco por defecto, tal y como sucedería si no se indica ninguno. El código anterior produce el mismo mensaje que el siguiente:

MessageBox.Show(
    'Texto del mensaje',
    'Título del mensaje',
    MessageBoxButtons.OKCancel,
    MessageBoxIcon.None,
    MessageBoxDefaultButton.Button1
    )

MessageBoxOptions

Finalmente, es sexto parámetro de posición nos permite configurar algunas opciones:

Al igual que yo, creo que nunca necesitarás utilizar estas opciones.