实战wxPython系列015 对话框(Dialog)是多数GUI应用不可缺少的部分。对话是指两个或更多人之间的交谈。在电脑应用中,对话框是指一个可以和应用交流的窗口,可以用来输入数据、修改数据、修改应用设置等。因此,对话框是用户和电脑程序交流的重要手段。 在GUI应用中,常常需要弹出一些提示信息,这时我们就会使用到消息对话框,在wxPython中提供了两种形式的消息对话框wx。MessageBox和wx。MessageDialog,在下面我们将分别演示如何使用这两种形式的对话框。 一、一个简单的消息框 消息框(MessageBox)可以给用户提供简单的信息,一个常见的例子就是下载应用,当下载完毕后弹出一个消息框。消息框(wx。MessageBox)importwxclassSampleMessageBox(wx。Frame):definit(self,args,kw):super(SampleMessageBox,self)。init(args,kw)self。InitUi()defInitUi(self):延迟3秒后调用self。ShowMessagewx。CallLater(3000,self。ShowMessage)self。SetTitle(实战wxPython:消息框)self。SetSize(400,280)self。Centre()defShowMessage(self):wx。MessageBox(下载完毕,信息,wx。OKwx。ICONINFORMATION)defmain():appwx。App()sampleSampleMessageBox(None)sample。Show()app。MainLoop()ifnamemain:main() 上面的例子将在3秒后展示一个消息对话框。wx。CallLater(3000,self。ShowMessage) wx。CallLater在3秒后会调用某个方法。第一个参数是时间值(以毫秒为单位),第二个参数是被调用的方法。 wx。MessageBox展示了一个小的对话框,其中三个参数,第一个为消息内容,第二个是标题,第三个是一些标记,用来展示不同的按钮和图标。在这个例子中,我们展示了一个OK按键和一个Information图标。 图1:MessageBox演示 二、消息对话框 消息对话框对话框显示单行或多行消息,它比消息框(wx。MessageBox)更加灵活,可定制更多的特性,比如可以更改消息对话框的图标或者按钮等。 消息对话框支持如下样式:wx。OK:在对话框上显示一个OK按钮,它可以和CANCEL按钮组合;wx。Cancel:在对话框上显示一个Cancel按钮,它可以和OK以及YESNO按钮组合;wx。YESNO:在对话框上同时显示Yes和No按钮,推荐使用这种样式的时候和CANCEL组合;wx。HELP:在对话框上显示Help按钮,如果其标签为系统缺省值,则它可以特殊的外观和位置;wx。YESDEFAULT:Yes按钮为默认值;wx。NODEFAULT:No按钮为默认值;wx。CANCELDEFAULT:Cancel按钮为默认值;wx。ICONNONE:如果可能,在对话框上不显示任何图标;wx。ICONERROR:在对话框上显示一个错误图标;wx。ICONWARNING:在对话框上显示一个警告图标;wx。ICONQUESTION:在对话框上显示一个问号标志;wx。ICONINFOMATION:在对话框上显示一个信息图标;wx。ICONEXCLAMATION:同wx。ICONWARNING;wx。ICONHAND:同wx。ICONERROR;wx。ICONAUTHNEEDED:显示身份验证所需的符号;wx。STAYONTOP:使消息框保持在所有其他窗口之上(目前仅在MSW和GTK下实现);wx。CENTRE:将消息框置于其父消息框的中央,如果未指定其父消息框,则将消息框置于屏幕中央。在MSW下设置此样式没有区别,因为对话框始终以父对象为中心。 图1:wx。MessageDialog继承关系消息对话(wx。MessageDialog)importwxclassSampleMessageDialog(wx。Frame):definit(self,args,kw):super(SampleMessageDialog,self)。init(args,kw)self。InitUi()defInitUi(self):panelwx。Panel(self)hboxwx。BoxSizer()sizerwx。GridSizer(2,2,2,2)btnInfowx。Button(panel,label信息)btnErrorwx。Button(panel,label错误)btnQuestionwx。Button(panel,label问题)btnAlertwx。Button(panel,label警告)sizer。AddMany(〔btnInfo,btnError,btnQuestion,btnAlert〕)hbox。Add(sizer,0,wx。ALL,15)panel。SetSizer(hbox)btnInfo。Bind(wx。EVTBUTTON,self。ShowMessageInfo)btnError。Bind(wx。EVTBUTTON,self。ShowMessageError)btnQuestion。Bind(wx。EVTBUTTON,self。ShowMessageQuestion)btnAlert。Bind(wx。EVTBUTTON,self。ShowMessageAlert)self。SetTitle(实战wxPython:消息对话框)self。SetSize(400,280)self。Centre()defShowMessageInfo(self,e):dlgwx。MessageDialog(None,下载完成,信息,wx。OK)dlg。ShowModal()defShowMessageError(self,e):dlgwx。MessageDialog(None,错误加载文件,错误,wx。OKwx。ICONERROR)dlg。ShowModal()defShowMessageQuestion(self,e):dlgwx。MessageDialog(None,确定退出应用?,问题,wx。YESNOwx。NODEFAULTwx。ICONQUESTION)dlg。ShowModal()defShowMessageAlert(self,e):dlgwx。MessageDialog(None,不允许的操作,警告,wx。OKwx。ICONEXCLAMATION)dlg。ShowModal()defmain():appwx。App()sampleSampleMessageDialog(None)sample。Show()app。MainLoop()ifnamemain:main() 在上面的例子中,我们创建了4个按钮并将之放置到一个gridsizer中。这些按钮将展示4个不同的对话框窗口,这些窗口在创建时使用了不同的样式标记。 创建消息对话框比较简单。通过将parent参数设置为None,可以将对话框设置为顶层窗口。接着的两个字符串参数为消息内容和对话框的标题。调用ShowModal()函数,可以将对话框显示在屏幕上。 图2:wx。MessageDialog演示 三、本文知识点使用wx。MessageBox;使用wx。MessageDialog。 前一篇:wxPython系统常用事件 请关注,评论,收藏,点赞,和转发。