这第二个简单类型的对话框是wx.TextEntryDialog,它被用于从用户那里得到短的文本输入。它通常用在在程序的开始时要求用户名或密码的时候,或作为一个数据输入表单的基本替代物。图9.3显示了一个典型的文本对话框。
图9.3 文本输入标准对话框
例9.3显示了产生图9.3的代码
例9.3
import wx
if __name__ == "__main__":
app = wx.PySimpleApp()
dialog = wx.TextEntryDialog(None,
"What kind of text would you like to enter?",
"Text Entry", "Default Value", style=wx.OK|wx.CANCEL)
if dialog.ShowModal() == wx.ID_OK:
print "You entered: %s" % dialog.GetValue()
dialog.Destroy()
在前一小节,我们创建了一个对话框类的实例,在这里,我们要用到的对话框类是wx.TextEntryDialog。该类的构造函数比简单消息对话框要复杂一些:
wx.TextEntryDialog(parent, message, caption="Please enter text",
defaultValue="", style=wx.OK | wx.CANCEL | wx.CENTRE,
pos=wx.DefaultPosition)
message参数是显示在对话框中的文本提示,而caption显示在标题栏中。defaultValue显示在文本框中的默认值。style可以包括wx.OK和wx.CANCEL,它显示适当的按钮。
几个wx.TextCtrl的样式也可以用在这里。最有用的应该是wx.TE_PASSWORD,它掩饰所输入的真实密码。你也可以使用wx.TE_MULTILINE来使用户能够在对话框中输入多行文本,也可以使用wx.TE_LEFT, wx.TE_CENTRE, 和 wx.TE_RIGHT来调整所输入的文本的对齐位置。
例9.3的最后显示了在文本框和对话框之间的另一区别。用户所输入的信息被存储在该对话框实例中,并且以后必须应用程序获取。在这种情况下,你可以使用对话框的GetValue()方法来得到该值。记住,如果用户按下Cancel(取消)去退出该对话框,这意味他们不想去使用他所键入的值。你也可以在程序中使用SetValue()方法来设置该值。
下面这些是使用文本对话框的便利函数:
1、wx.GetTextFromUser()
2、wx.GetPasswordFromUser()
3、wx.GetNumberFromUser()
其中和例9.3的用处最近似的是wx.GetTextFromUser():
wx.GetTextFromUser(message, caption="Input text",
default_value="", parent=None)
这里的message, caption, default_value, 和 parent与wx.TextEntryDialog的构造函数中的一样。如果用户按下OK,该函数的返回值是用户所输入的字符串。如果用户按下Cancel,该函数返回空字符串。
如果你希望用户输入密码,你可以使用wx.GetPasswordFromUser()函数:
wx.GetPasswordFromUser(message, caption="Input text",
default_value="", parent=None)
这里的参数意义和前面的一样。用户的输入被显示为星号,如果用户按下OK,该函数的返回值是用户所输入的字符串。如果用户按下Cancel,该函数返回空字符串。
最后,你可以使用wx.GetNumberFromUser()要求用户输入一个数字:
wx.GetNumberFromUser(message, prompt, caption, value, min=0,
max=100, parent=None)
这里的参数的意义有一点不同,message是显在prompt上部的任意长度的消息,value参数是默认显示在文本框中的长整型值。min和max参数为用户的输入限定一个范围。如果用户按下OK按钮退出的话,该方法返回所输入的值,并转换为长整型。如果这个值不能转换为一个数字,或不在指定的范围内,那么该函数返回-1,这意味如果你将该函数用于负数的范围的话,你可能要考虑一个转换的方法。
9.1.4 如何用对话框显示选项列表?
如果给你的用户一个空的文本输入域显得太自由了,那么你可以使用wx.SingleChoiceDialog来让他们在一组选项中作单一的选择。图9.4显示了一个例子。
图9.4 一个单选对话框
例9.4显示了产生图9.4的代码
例9.4 显示一个选择列表对话框
import wx
if __name__ == "__main__":
app = wx.PySimpleApp()
choices = ["Alpha", "Baker", "Charlie", "Delta"]
dialog = wx.SingleChoiceDialog(None, "Pick A Word", "Choices",
choices)
if dialog.ShowModal() == wx.ID_OK:
print "You selected: %s/n" % dialog.GetStringSelection()
dialog.Destroy()
wx.SingleChoiceDialog的构造函数如下所示:
wx.SingleChoiceDialog(parent, message, caption, choices,
clientData=None, style=wx.OK | wx.CANCEL | wx.CENTRE,
pos=wx.DefaultPosition)
message和caption参数的意义与前面的一样,分别显示在对话框和标题栏中。choices参数要求一个字符串的列表,它们是你呈现在对话框中的选项。style参数有三个项,这是默认的,分别是OK按钮、Cancle按钮和使对话框在屏幕中居中。centre选项和pos参数在Windows操作系统上不工作。
如果你想在用户看见对话框之前,设置它的默认选项,使用SetSelection(selection)方法。参数selection是选项的索引值,而非实际选择的字符串。在用户选择了一个选项后,你即可以使用GetSelection()——它返回所选项的索引值,也可以使用GetStringSelection()——它返回实际所选的字符串,来得到它。
有两个用于单选对话框的便利函数。第一个是wx.GetSingleChoice,它返回用户所选的字符串:
wx.GetSingleChoice(message, caption, aChoices, parent=None)
参数message, caption, 和parent的意义和wx.SingleChoiceDialog构造函数的一样。aChoices参数是选项的列表。如果用户按下OK,则返回值是所选的字符串,如果用户按下Cancel,则返回值是空字符串。这意味如果空字符是一个有效的选择的话,那么你就不该使用这个函数。
第二个是wx.GetSingleChoiceIndex:
wx.GetSingleChoiceIndex(message, caption, aChoices, parent=None)
这个函数与第一个有相同的参数,但是返回值不同。如果用户按下OK,则返回值是所选项的索引,如果用户按下Cancel,则返回值是-1。