在GUI程序中,常常需要一种简单的对话框来提供一个单行的信息输入来提供一些简短的文本输入,比如通常在程序开始的时候要求用户名或者密码的时候,或者作为一个数据输入框等。为此wxPython提供了一个简单类型的对话框类wx.TextEntryDialog可以快速方便地实现简短文本输入。根据密码输入要求,在wxPython在wx.TextEntryDialog之上导出类wx.PasswordEntryDialog来专门实现密码输入。 wx.NumberEntryDialog对话框则专门用于数字输入。
一、文本输入对话框wx.TextEntryDialog
文本输入对话框wx.TextEntryDialog提供一个单行文本输入对话框,其构造函数原型为:
wx.TextEntryDialog(parent,message,caption,defaultvalue,style,pos)
参数:
parent:父窗口句柄;
message:提示信息,一般提示文本框该输入什么类型的信息;
caption: 标题文字;
defaultvalue: 默认值;
style:窗口样式
pos:窗口显示位置
wx.TextEntryDialog常用方法有:
- ForceUpper(self):将输入到对话框使用的文本控件中的所有文本转换为大写。调用此方法可确保输入到对话框使用的文本控件中的所有文本都被动态转换为大写。如果文本控件不为空,则其现有内容也转换为大写。该方法为wxPython4.1/wxWidgets-3.1.0新版功能。
- GetValue(self):如果用户按了wx.OK,则返回用户输入的文本。如果用户按了取消键,则返回原始值。
- SetMaxLength(self, len):设置用户可以在此对话框中输入的最大字符数。
- SetValue(self, value):设置默认文本值。
- ShowModal(self): 显示对话框,如果点击了wx.OK按钮则返回wx.ID_OK,否则返回wx.ID_CANCEL。
图1:wx.TextEntryDialog类继承关系
二、wx.TextEntryDialog演示
下面的代码演示如何使用wx.TextEntryDialog:
#文本输入对话框(TextEntryDialog)
import wx
class SampleTextEntryDialog(wx.Frame):
def __init__(self, *args, **kw):
super(SampleTextEntryDialog, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
#设置标题
self.SetTitle("实战wxPython: 文本输入对话框")
#设置窗口尺寸
self.SetSize(480, 360)
panel = wx.Panel(self)
# 创建输入对话框
dlg = wx.TextEntryDialog(self, "你最喜欢的编程语言是?", "TextEntryDialog","Python")
if dlg.ShowModal() == wx.ID_OK:
lang = "我最喜欢的编程语言是:" + dlg.GetValue()
else:
lang = "我不会编程"
dlg.Destroy()
#用一个静态文本框显示输入的内容
wx.StaticText(panel, -1, lang, pos=(10, 10))
self.Centre()
def main():
app = wx.App()
sample = SampleTextEntryDialog(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
运行上述代码,首先会弹出一个文本输入对话框(如图2):
图2:wx.TextEntryDialog演示
在文本框中输入”Python”, 然后点击”确认”按钮,最后在主窗口上将显示信息“我最喜欢的编程语言是:Python”, 如图3所示。
图3:显示wx.TextEntryDialog的输入信息
三、wx.GetTextFromUser
调用wx.GetTextFromUser全局方法,可以弹出一个文本输入对话框,其原型为:
wx.GetTextFromUser(message, caption, defaultValue, parent, x, y, centre)
参数:
message: 对话框中显示的信息,该信息可以包含换行符。
caption: 对话框标题。
defaultValue: 默认文本。
parent: 父窗口。
x: 对话框水平方向位置。
y: 对话框垂直方向位置。
centre: 为真是对话框位于中央,其他情况左对齐。
调用方法:
text = wx.GetTextFromUser("你最喜欢的编程语言是?", "编程语言调查","Python")
四、密码输入对话框wx. PasswordEntryDialog
为了密码输入的特殊性(在输入时不显示输入的字符), wxPython提供了密码输入对话框类wx.PasswordEntryDialog来实现对密码输入要求的功能。
Wx.PasswordEntryDialog的构造函数原型和基本方法同wx.TextEntryDialog。
图4:wx.PasswordEntryDialog类继承关系
下面的代码演示了如何调用wx.PasswordEntryDialog:
#密码输入对话框(PasswordEntryDialog)
import wx
class SamplePasswordEntryDialog(wx.Frame):
def __init__(self, *args, **kw):
super(SamplePasswordEntryDialog, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
#设置标题
self.SetTitle("实战wxPython: 密码输入对话框")
#设置窗口尺寸
self.SetSize(480, 360)
panel = wx.Panel(self)
# 创建输入对话框
dlg = wx.PasswordEntryDialog(self, "请输入密码", "密码输入","123456")
if dlg.ShowModal() == wx.ID_OK:
lang = "当前密码是:" + dlg.GetValue()
else:
lang = "未输入密码"
dlg.Destroy()
#用一个静态文本框显示输入的内容
wx.StaticText(panel, -1, lang, pos=(10, 10))
self.Centre()
def main():
app = wx.App()
sample = SamplePasswordEntryDialog(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
运行上述代码,首先会弹出一个文本输入对话框(如图5):
图5:wx.PasswordEntryDialog演示
输入密码后,点击”确认”按钮,将在主窗口显示刚才输入的密码信息,如图6所示:
图6:显示wx.PasswordEntryDialog输入的密码信息
六、wx.GetPasswordFromUser
调用wx.GetPasswordFromUser全局方法,可以弹出一个文本输入对话框,其原型为:
wx. GetPasswordFromUser (message, caption, defaultValue, parent)
参数:
message: 对话框中显示的信息,该信息可以包含换行符。
caption: 对话框标题。
defaultValue: 默认文本。
parent: 父窗口。
调用方法:
password = wx.GetPasswordFromUser("请输入密码", "密码输入","123456")
七、数字输入对话框wx.NumberEntryDialog
wx.NumberEntryDialog提示用户输入一个固定范围内的数字,这个对话框包含一个spin控件因此,用户既可以手动输入数字,也可以通过鼠标点击spin按钮来调整数字的值,这个对话框是wxWidgets自己实现的,因此在各个平台上的表现都是相似的。
wx.NumberEntryDialog构造函数原型:
wx.NumberEntryDialog(parent, message, prompt, caption, value, min, max, pos)
参数:
parent: 父窗口。
message: 对话框中显示的信息,该信息可以包含换行符。
prompt: 输入框前的提示信息。
caption: 对话框标题。
value: 默认值。
min: 最小值。
max: 最大值。
pos:对话框显示的位置。
wx.NumberEntryDialog 常用方法:
- GetValue(self):如果用户按了确认键(wx.OK),则返回用户输入的值。如果用户按了取消键,则返回原始值。
图7. wx.NumberEntryDialog类继承关系
八、wx.GetNumberFromUser
调用wx.GetNumberFromUser全局方法,可以弹出一个文本输入对话框,其原型为:
wx.GetNumberFromUser(message, prompt, caption, value, min, max, parent, pos)
参数:
message: 对话框中显示的信息,该信息可以包含换行符。
prompt: 输入框前的提示信息。
caption: 对话框标题。
value: 默认值。
min: 最小值,默认值为0。
max: 最大值,默认值为100。
parent: 父窗口,默认值为None。
pos:对话框显示的位置,默认值为DefaultPosition。
调用方法为:
value = wx.GetNumberFromUser("请输入一组数字,范围是0-100", "当前值","wx. GetNumberFromUser演示", 10)
如果用户按了确认键(wx.OK),则返回用户输入的值。如果用户按了取消键,则返回原始值。
九、 wx.NumberEntryDialog演示
以下代码演示了如何调用wx.NumberEntryDialog。
#!/usr/bin/env python
"""
实战 wxPython之: 对话框
作者: wu wintel
email: wuwintop@foxmail.com
"""
#数字输入对话框(NumberEntryDialog)
import wx
class SampleNumberEntryDialog(wx.Frame):
def __init__(self, *args, **kw):
super(SampleNumberEntryDialog, self).__init__(*args, **kw)
self.InitUi()
def InitUi(self):
#设置标题
self.SetTitle("实战wxPython: 数字输入对话框")
#设置窗口尺寸
self.SetSize(480, 360)
panel = wx.Panel(self)
# 创建输入对话框
dlg = wx.NumberEntryDialog(self, "请输入一组数字,范围是0-10000", "当前值","wx.NumberEntryDialog演示", 100, 0, 10000)
if dlg.ShowModal() == wx.ID_OK:
lang = "输入的数字是:" + str(dlg.GetValue())
else:
lang = "输入取消"
dlg.Destroy()
#用一个静态文本框显示输入的内容
wx.StaticText(panel, -1, lang, pos=(10, 10))
self.Centre()
def main():
app = wx.App()
sample = SampleNumberEntryDialog(None)
sample.Show()
app.MainLoop()
if __name__ == "__main__":
main()
运行上面的代码,输入数字,点击”确认”按钮,将在主窗口显示刚才输入的数字:
图8. wx.NumberEntryDialog演示
十、本文知识点
- 了解和使用wx.TextEntryDialog。
- 了解和使用wx.PasswordDialog。
- 调用wx.GetTextFromUser全局方法。
- 调用wx.GetPasswordFromUser全局方法。
- 了解和使用wx.NumberEntryDialog。
- 调用wx.GetNumberFromUser全局方法。