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:
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í:
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
:
MessageBoxButtons.OK
MessageBoxButtons.OKCancel
MessageBoxButtons.YesNo
MessageBoxButtons.RetryCancel
MessageBoxButtons.YesNoCancel
MessageBoxButtons.AbortRetryIgnore
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
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)
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)
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)
El valor devuelto puede ser DialogResult.Retry
o DialogResult.Cancel
.
MessageBoxButtons.YesNoCancel
result = MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.YesNoCancel)
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)
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.None
MessageBoxIcon.Question
MessageBoxIcon.Information
- Alias:MessageBoxIcon.Asterisk
MessageBoxIcon.Warning
- Alias:MessageBoxIcon.Exclamation
MessageBoxIcon.Error
- Alias:MessageBoxIcon.Hand
,MessageBoxIcon.Stop
MessageBoxIcon.Question
MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.Question)
MessageBoxIcon.Information
MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.Information)
Obtendríamos el mismo resultado con MessageBoxIcon.Asterisk
.
MessageBoxIcon.Warning
MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.Warning)
Obtendríamos el mismo resultado con MessageBoxIcon.Exclamation
.
MessageBoxIcon.Error
MessageBox.Show('Texto del mensaje', 'Título del mensaje', MessageBoxButtons.OK, MessageBoxIcon.Error)
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:
MessageBoxDefaultButton.Button1
MessageBoxDefaultButton.Button2
MessageBoxDefaultButton.Button3
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:
MessageBoxOptions.ServiceNotification
- Se utiliza para mostrar el mensaje en el escritorio actual, el que está activo. Se muestra incluso cuando ningún usuario ha iniciado sesión en el escritorio.MessageBoxOptions.DefaultDesktopOnly
- Igual que el anterior a diferencia de que el mensaje se muestra en la ventana interactiva.MessageBoxOptions.RightAlign
- El texto del mensaje se muestra alineado a la derecha.MessageBoxOptions.RtlReading
- El título del mensaje se muestra alineado a la derecha.
Al igual que yo, creo que nunca necesitarás utilizar estas opciones.