wxpython入门第四步(wxpython入门第四步对话框)
wxpython入门第四步(wxpython入门第四步对话框)这些是可以用于wx.MessageDialog类的flag消息对话框用于向用户显示消息。它们比我们在前面的例子中看到的简单的消息框更加灵活。它们是可定制的。我们可以改变对话框中显示的图标和按钮。wx.CallLater(3000 self.ShowMessage)wx.CallLater在三秒后调用一个方法。第一个参数是一个时间值,在这个时间值之后调用一个给定的方法。参数的单位是毫秒。第二个参数是一个要调用的方法。def ShowMessage(self): wx.MessageBox('Download completed' 'Info' wx.OK | wx.ICON_INFORMATION)wx.MessageBox显示一个小的对话框窗口。我们提供三个参数:文本信息、标题信息和标志。标志用于显示不同的按钮和图标。在我们的
wxPython 对话框对话窗口或对话框是大多数现代GUI应用程序中不可缺少的一部分。对话的定义是两个或两个以上的人之间的对话。在计算机应用程序中,对话框是一个窗口,用于与应用程序 "对话"。对话框用于输入数据、修改数据、改变应用程序的设置等。对话框是用户与计算机程序之间重要的交流手段。
我们可以使用预定义的对话框,如消息框、字体或颜色对话框,也可以创建自己的自定义对话框。
一个简单的消息框
消息框为用户提供简短的信息。一个很好的例子是一个CD刻录应用程序。当光盘刻录完成后,会弹出一个消息框。
#message_box.py
import wx
class Example(wx.Frame):
def __init__(self *args **kwargs):
super(Example self).__init__(*args **kwargs)
self.InitUI()
def InitUI(self):
wx.CallLater(3000 self.ShowMessage)
self.SetSize((300 200))
self.SetTitle('Message box')
self.Centre()
def ShowMessage(self):
wx.MessageBox('Download completed' 'Info'
wx.OK | wx.ICON_INFORMATION)
def main():
app = wx.App()
ex = Example(None)
ex.Show()
app.MainLoop()
if __name__ == '__main__':
main()
这个例子显示的是三秒钟后的消息框
wx.CallLater(3000 self.ShowMessage)
wx.CallLater
在三秒后调用一个方法。第一个参数是一个时间值,在这个时间值之后调用一个给定的方法。参数的单位是毫秒。第二个参数是一个要调用的方法。
def ShowMessage(self):
wx.MessageBox('Download completed' 'Info'
wx.OK | wx.ICON_INFORMATION)
wx.MessageBox
显示一个小的对话框窗口。我们提供三个参数:文本信息、标题信息和标志。标志用于显示不同的按钮和图标。在我们的例子中,我们显示一个OK按钮和信息图标。
预定义对话框
wxPython 有几个预定义的对话框。这些对话框用于常见的编程任务,如显示文本、接收输入、加载和保存文件。
消息对话框
消息对话框用于向用户显示消息。它们比我们在前面的例子中看到的简单的消息框更加灵活。它们是可定制的。我们可以改变对话框中显示的图标和按钮。
flag | meaning |
---|---|
wx.OK | show OK Button |
wx.CANCEL | show Cancel button |
wx.YES_NO | show Yes No buttons |
wx.YES_DEFAULT | make Yes button the default |
wx.NO_DEFAULT | make No button the default |
wx.ICON_EXCLAMATION | show an alert icon |
wx.ICON_ERROR | show an error icon |
wx.ICON_HAND | same as wx.ICON_ERROR |
wx.ICON_INFORMATION | show an info icon |
wx.ICON_QUESTION | show a question icon |
这些是可以用于wx.MessageDialog
类的flag
#message_dialogs.py
import wx
class Example(wx.Frame):
def __init__(self *args **kwargs):
super(Example self).__init__(*args **kwargs)
self.InitUI()
def InitUI(self):
panel = wx.Panel(self)
hbox = wx.BoxSizer()
sizer = wx.GridSizer(2 2 2 2)
btn1 = wx.Button(panel label='Info')
btn2 = wx.Button(panel label='Error')
btn3 = wx.Button(panel label='Question')
btn4 = wx.Button(panel label='Alert')
sizer.AddMany([btn1 btn2 btn3 btn4])
hbox.Add(sizer 0 wx.ALL 15)
panel.SetSizer(hbox)
btn1.Bind(wx.EVT_BUTTON self.ShowMessage1)
btn2.Bind(wx.EVT_BUTTON self.ShowMessage2)
btn3.Bind(wx.EVT_BUTTON self.ShowMessage3)
btn4.Bind(wx.EVT_BUTTON self.ShowMessage4)
self.SetSize((300 200))
self.SetTitle('Messages')
self.Centre()
def ShowMessage1(self event):
dial = wx.MessageDialog(None 'Download completed' 'Info' wx.OK)
dial.ShowModal()
def ShowMessage2(self event):
dial = wx.MessageDialog(None 'Error loading file' 'Error'
wx.OK | wx.ICON_ERROR)
dial.ShowModal()
def ShowMessage3(self event):
dial = wx.MessageDialog(None 'Are you sure to quit?' 'Question'
wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
dial.ShowModal()
def ShowMessage4(self event):
dial = wx.MessageDialog(None 'Unallowed operation' 'Exclamation'
wx.OK | wx.ICON_EXCLAMATION)
dial.ShowModal()
def main():
app = wx.App()
ex = Example(None)
ex.Show()
app.MainLoop()
if __name__ == '__main__':
main()
在我们的例子中,我们已经创建了四个按钮,并将它们放在一个网格尺中。这些按钮将显示四个不同的对话窗口。我们通过指定不同的样式标志来创建它们。
def ShowMessage2(self event):
dial = wx.MessageDialog(None 'Error loading file' 'Error'
wx.OK | wx.ICON_ERROR)
dial.ShowModal()
消息对话框的创建很简单。我们将对话框设置为一个toplevel窗口,提供None作为父窗口。这两个字符串提供了消息文本和对话框的标题。我们通过指定wx.OK
和wx.ICON_ERROR
标志来显示一个OK按钮和一个错误图标。为了在屏幕上显示对话框,我们调用ShowModal()
方法。
自定义对话框
在下一个例子中,我们创建一个自定义对话框。一个图像编辑程序可以改变图片的颜色深度,为了提供这个功能,我们可以创建一个合适的对话框。为了提供这个功能,我们可以创建一个合适的对话框。
#custom_dialog.py
import wx
class ChangeDepthDialog(wx.Dialog):
def __init__(self *args **kw):
super(ChangeDepthDialog self).__init__(*args **kw)
self.InitUI()
self.SetSize((250 200))
self.SetTitle("Change Color Depth")
def InitUI(self):
pnl = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
sb = wx.StaticBox(pnl label='Colors')
sbs = wx.StaticBoxSizer(sb orient=wx.VERTICAL)
sbs.Add(wx.RadioButton(pnl label='256 Colors'
style=wx.RB_GROUP))
sbs.Add(wx.RadioButton(pnl label='16 Colors'))
sbs.Add(wx.RadioButton(pnl label='2 Colors'))
hbox1 = wx.BoxSizer(wx.HORIZONTAL)
hbox1.Add(wx.RadioButton(pnl label='Custom'))
hbox1.Add(wx.TextCtrl(pnl) flag=wx.LEFT border=5)
sbs.Add(hbox1)
pnl.SetSizer(sbs)
hbox2 = wx.BoxSizer(wx.HORIZONTAL)
okButton = wx.Button(self label='Ok')
closeButton = wx.Button(self label='Close')
hbox2.Add(okButton)
hbox2.Add(closeButton flag=wx.LEFT border=5)
vbox.Add(pnl proportion=1
flag=wx.ALL|wx.EXPAND border=5)
vbox.Add(hbox2 flag=wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM border=10)
self.SetSizer(vbox)
okButton.Bind(wx.EVT_BUTTON self.OnClose)
closeButton.Bind(wx.EVT_BUTTON self.OnClose)
def OnClose(self e):
self.Destroy()
class Example(wx.Frame):
def __init__(self *args **kw):
super(Example self).__init__(*args **kw)
self.InitUI()
def InitUI(self):
tb = self.CreateToolBar()
tb.AddTool(toolId=wx.ID_ANY label='' bitmap=wx.Bitmap('icon_1.png'))
tb.Realize()
tb.Bind(wx.EVT_TOOL self.OnChangeDepth)
self.SetSize((350 250))
self.SetTitle('Custom dialog')
self.Centre()
def OnChangeDepth(self e):
cdDialog = ChangeDepthDialog(None
title='Change Color Depth')
cdDialog.ShowModal()
cdDialog.Destroy()
def main():
app = wx.App()
ex = Example(None)
ex.Show()
app.MainLoop()
if __name__ == '__main__':
main()
在上面的例子中,我们已经创建了一个自定义对话框。
class ChangeDepthDialog(wx.Dialog):
def __init__(self *args **kw):
super(ChangeDepthDialog self).__init__(*args **kw)
在我们的代码示例中,我们创建了一个自定义的ChangeDepthDialog对话框。我们从wx.Dialog widget继承。
def OnChangeDepth(self e):
cdDialog = ChangeDepthDialog(None
title='Change Color Depth')
cdDialog.ShowModal()
cdDialog.Destroy()
我们实例化一个ChangeDepthDialog类。然后我们调用ShowModal()方法。稍后,我们必须使用Destroy()来销毁我们的对话框,请注意对话框和顶层窗口之间的视觉差异。右图中的对话框已经被激活。在对话框被销毁之前,我们不能对顶层窗口进行工作。窗口的标题栏有明显的区别。