9.1 使用模式对话框工作
9.1 使用模式对话框工作
模式对话框用于与用户进行快速的交互或在用户可以执行程序的下一步之前,对话框中的信息必须被输入的时候。在wxPython中,有几个标准的函数用来显示基本的模式对话框。这些对话框包括警告框,单行文本域,和从列表中选择。在随后的部分,我们将给你展示这些对话框,以及如何使用这些预定义的函数来减轻你的工作量。
9.1.1 如何创建一个模式对话框?
模式对话框阻塞了别的窗口部件接收用户事件,直到该模式对话框被关闭;换句话说,在它存在期间,用户一直被置于对话模式中。如图9.1所示,你不能总是根据外观来区别对话框和框架。在wxPython中,对话框与框架间的区别不是基于它们的外观的,而主要是它们处理事件的办法的实质。
图9.1 一个模式对话框
![]()
对话框的创建和配置与框架稍微有些不同。例9.1显示了产生图9.1的代码。所显示的对话框上的按钮被敲击后,该对话框就关闭了,并且一条消息被输出到stdout(标准输出)。
例9.1 定义一个模式对话框
import wx
class SubclassDialog(wx.Dialog):
def __init__(self):#初始化对话框
wx.Dialog.__init__(self, None, -1, 'Dialog Subclass',
size=(300, 100))
okButton = wx.Button(self, wx.ID_OK, "OK", pos=(15, 15))
okButton.SetDefault()
cancelButton = wx.Button(self, wx.ID_CANCEL, "Cancel",
pos=(115, 15))
if __name__ == '__main__':
app = wx.PySimpleApp()
app.MainLoop()
dialog = SubclassDialog()
result = dialog.ShowModal()#显示模式对话框
if result == wx.ID_OK:
print "OK"
else:
print "Cancel"
dialog.Destroy()
与前一章的wx.Frame的例子比较,这儿有两个需要注意的事情。在__init__方法中,按钮是被直接添加到wx.Dialog,而非 wx.Panel。面板在对话框中的使用比在框架中少的多,部分原因是因为对话框与框架相比倾向简单化,但主要是因为wx.Panel特性(标准系统背景和tab键横向切换控件焦点)已经默认存在于wx.Dialog中。
要显示为模式对话框,使用ShowModal()方法。这与用于框架的的Show()方法在对程序的执行上有不同的作用。在调用ShowModal()后你的应用程序将处于等待中,直到对话框被取消。
模式将保持到对话框方法EndModal(retCode)被调用,该方法关闭对话框。参数retCode是由ShowModal()方法返回的一个整数值。典型的,应用程序利用这个返回值来知道用户是如何关闭对话框的,以控制以后的操作。但是结束这个模式并没有销毁或甚至关闭对话框。保持对话框的存在可能是一件好事,因为这意味你可以把用户选择的信息存储为对话框实例的数据成员,并且即使在对话框被关闭后也能从对话框重新获得那些信息。在接下来的部分,我们将看一些我们使用对话框处理程序中用户输入的数据的例子。
由于例9.1中没有定义事件处理器,你可能会惊奇对话框是如何响应按钮敲击的。这个行为已经定义在wxDialog中了。有两个预定义的wxPython ID号,它们在对话框中有特殊的意思。当对话框中的一个使用 wx.ID_OK ID的wx.Button被敲击时,模式就结束了,对话框也关闭了,wx.ID_OK就是ShowModal()调用返回的值。同样,一个使用wx.ID_CANCEL ID的按钮做相同的事情,但是ShowModal()的返回值是wx.ID_CANCEL。
例9.1显示了处理模式对话框的一个典型的方法。在对话框被调用后,返回值被用作if语句中的测试。在这种情况下,我们简单地打印结果,在更复杂的例子中,wx.ID_OK将执行用户在对话框中所要求的动作,如打开文件或选择颜色。
典型的,你在完成对对话框的使用后,你应该显式地销毁它。这通知C++对象它应该自我销毁,然后这将使得它的Python部分被作为垃圾回收。如果你希望在你的应用程序中,以后再次使用该对话框时不重建它,以加速对话框的响应时间,那么你可以保持对该对话框的一个引用,并当你需要再次激活它时,简单地调用它的ShowModal()方法。当应用程序准备退出时,确保已销毁了它,否则MainLoop()将仍将它作为一个存在的顶级窗口,并且程序将不能正常退出。
模式对话框用于与用户进行快速的交互或在用户可以执行程序的下一步之前,对话框中的信息必须被输入的时候。在wxPython中,有几个标准的函数用来显示基本的模式对话框。这些对话框包括警告框,单行文本域,和从列表中选择。在随后的部分,我们将给你展示这些对话框,以及如何使用这些预定义的函数来减轻你的工作量。
9.1.1 如何创建一个模式对话框?
模式对话框阻塞了别的窗口部件接收用户事件,直到该模式对话框被关闭;换句话说,在它存在期间,用户一直被置于对话模式中。如图9.1所示,你不能总是根据外观来区别对话框和框架。在wxPython中,对话框与框架间的区别不是基于它们的外观的,而主要是它们处理事件的办法的实质。
图9.1 一个模式对话框

对话框的创建和配置与框架稍微有些不同。例9.1显示了产生图9.1的代码。所显示的对话框上的按钮被敲击后,该对话框就关闭了,并且一条消息被输出到stdout(标准输出)。
例9.1 定义一个模式对话框
import wx
class SubclassDialog(wx.Dialog):
def __init__(self):#初始化对话框
wx.Dialog.__init__(self, None, -1, 'Dialog Subclass',
size=(300, 100))
okButton = wx.Button(self, wx.ID_OK, "OK", pos=(15, 15))
okButton.SetDefault()
cancelButton = wx.Button(self, wx.ID_CANCEL, "Cancel",
pos=(115, 15))
if __name__ == '__main__':
app = wx.PySimpleApp()
app.MainLoop()
dialog = SubclassDialog()
result = dialog.ShowModal()#显示模式对话框
if result == wx.ID_OK:
print "OK"
else:
print "Cancel"
dialog.Destroy()
与前一章的wx.Frame的例子比较,这儿有两个需要注意的事情。在__init__方法中,按钮是被直接添加到wx.Dialog,而非 wx.Panel。面板在对话框中的使用比在框架中少的多,部分原因是因为对话框与框架相比倾向简单化,但主要是因为wx.Panel特性(标准系统背景和tab键横向切换控件焦点)已经默认存在于wx.Dialog中。
要显示为模式对话框,使用ShowModal()方法。这与用于框架的的Show()方法在对程序的执行上有不同的作用。在调用ShowModal()后你的应用程序将处于等待中,直到对话框被取消。
模式将保持到对话框方法EndModal(retCode)被调用,该方法关闭对话框。参数retCode是由ShowModal()方法返回的一个整数值。典型的,应用程序利用这个返回值来知道用户是如何关闭对话框的,以控制以后的操作。但是结束这个模式并没有销毁或甚至关闭对话框。保持对话框的存在可能是一件好事,因为这意味你可以把用户选择的信息存储为对话框实例的数据成员,并且即使在对话框被关闭后也能从对话框重新获得那些信息。在接下来的部分,我们将看一些我们使用对话框处理程序中用户输入的数据的例子。
由于例9.1中没有定义事件处理器,你可能会惊奇对话框是如何响应按钮敲击的。这个行为已经定义在wxDialog中了。有两个预定义的wxPython ID号,它们在对话框中有特殊的意思。当对话框中的一个使用 wx.ID_OK ID的wx.Button被敲击时,模式就结束了,对话框也关闭了,wx.ID_OK就是ShowModal()调用返回的值。同样,一个使用wx.ID_CANCEL ID的按钮做相同的事情,但是ShowModal()的返回值是wx.ID_CANCEL。
例9.1显示了处理模式对话框的一个典型的方法。在对话框被调用后,返回值被用作if语句中的测试。在这种情况下,我们简单地打印结果,在更复杂的例子中,wx.ID_OK将执行用户在对话框中所要求的动作,如打开文件或选择颜色。
典型的,你在完成对对话框的使用后,你应该显式地销毁它。这通知C++对象它应该自我销毁,然后这将使得它的Python部分被作为垃圾回收。如果你希望在你的应用程序中,以后再次使用该对话框时不重建它,以加速对话框的响应时间,那么你可以保持对该对话框的一个引用,并当你需要再次激活它时,简单地调用它的ShowModal()方法。当应用程序准备退出时,确保已销毁了它,否则MainLoop()将仍将它作为一个存在的顶级窗口,并且程序将不能正常退出。
-*- 此文章为本人发呆时 ctrl+c , ctrl+v 的结果. 如果损害到您的利益, 可以联系我 QQ: 248078462 -*-