实战wxPython:015 - 消息对话框

对话框(Dialog)是多数 GUI 应用不可缺少的部分。“对话”是指两个或更多人之间的交谈。在电脑应用中,对话框是指一个可以和应用交流的窗口,可以用来输入数据、修改数据、修改应用设置等。因此,对话框是用户和电脑程序交流的重要手段。

在GUI应用中,常常需要弹出一些提示信息,这时我们就会使用到消息对话框,在wxPython中提供了两种形式的消息对话框wx.MessageBox和wx.MessageDialog,在下面我们将分别演示如何使用这两种形式的对话框。

一、一个简单的消息框

消息框(MessageBox)可以给用户提供简单的信息,一个常见的例子就是下载应用,当下载完毕后弹出一个消息框。

#消息框(wx.MessageBox)

import wx

class SampleMessageBox(wx.Frame):
    
    def __init__(self, *args, **kw):
        super(SampleMessageBox, self).__init__(*args, **kw)
        self.InitUi()

    def InitUi(self):

        #延迟3秒后调用self.ShowMessage
        wx.CallLater(3000, self.ShowMessage)

        self.SetTitle("实战wxPython: 消息框")
        self.SetSize(400, 280)
        self.Centre()

    def ShowMessage(self):
        wx.MessageBox("下载完毕", "信息", wx.OK | wx.ICON_INFORMATION)

def main():
    app = wx.App()
    sample = SampleMessageBox(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    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以及YES_NO按钮组合;
  • wx.YES_NO: 在对话框上同时显示Yes和No按钮,推荐使用这种样式的时候和CANCEL组合;
  • wx.HELP: 在对话框上显示Help按钮,如果其标签为系统缺省值,则它可以特殊的外观和位置;
  • wx.YES_DEFAULT: Yes按钮为默认值;
  • wx.NO_DEFAULT: No按钮为默认值;
  • wx.CANCEL_DEFAULT: Cancel按钮为默认值;
  • wx.ICON_NONE: 如果可能,在对话框上不显示任何图标;
  • wx.ICON_ERROR: 在对话框上显示一个错误图标;
  • wx.ICON_WARNING: 在对话框上显示一个警告图标;
  • wx.ICON_QUESTION: 在对话框上显示一个问号标志;
  • wx.ICON_INFOMATION: 在对话框上显示一个信息图标;
  • wx.ICON_EXCLAMATION: 同wx.ICON_WARNING;
  • wx.ICON_HAND: 同wx.ICON_ERROR;
  • wx.ICON_AUTH_NEEDED: 显示身份验证所需的符号;
  • wx.STAY_ON_TOP: 使消息框保持在所有其他窗口之上 (目前仅在MSW和GTK下实现);
  • wx.CENTRE: 将消息框置于其父消息框的中央,如果未指定其父消息框,则将消息框置于屏幕中央。在MSW下设置此样式没有区别,因为对话框始终以父对象为中心。

 图1:wx.MessageDialog继承关系

#消息对话(wx.MessageDialog)

import wx

class SampleMessageDialog(wx.Frame):
    def __init__(self, *args, **kw):
        super(SampleMessageDialog, self).__init__(*args, **kw)
        self.InitUi()

    def InitUi(self):
        panel = wx.Panel(self)
        hbox = wx.BoxSizer()
        sizer = wx.GridSizer(2,2,2,2)

        btnInfo = wx.Button(panel, label="信息")
        btnError = wx.Button(panel, label="错误")
        btnQuestion = wx.Button(panel, label="问题")
        btnAlert = wx.Button(panel, label="警告")

        sizer.AddMany([btnInfo, btnError, btnQuestion, btnAlert])
        hbox.Add(sizer, 0, wx.ALL, 15)
        panel.SetSizer(hbox)

        btnInfo.Bind(wx.EVT_BUTTON, self.ShowMessageInfo)
        btnError.Bind(wx.EVT_BUTTON, self.ShowMessageError)
        btnQuestion.Bind(wx.EVT_BUTTON, self.ShowMessageQuestion)
        btnAlert.Bind(wx.EVT_BUTTON, self.ShowMessageAlert)

        self.SetTitle("实战wxPython: 消息对话框")
        self.SetSize(400, 280)
        self.Centre()

    def ShowMessageInfo(self, e):
        dlg = wx.MessageDialog(None, "下载完成", "信息", wx.OK)
        dlg.ShowModal()

    def ShowMessageError(self, e):
        dlg = wx.MessageDialog(None, "错误加载文件", "错误", wx.OK | wx.ICON_ERROR)
        dlg.ShowModal()

    def ShowMessageQuestion(self, e):
        dlg = wx.MessageDialog(None, "确定退出应用?", "问题", wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
        dlg.ShowModal()

    def ShowMessageAlert(self, e):
        dlg = wx.MessageDialog(None, "不允许的操作", "警告", wx.OK | wx.ICON_EXCLAMATION)
        dlg.ShowModal()

def main():
    app = wx.App()
    sample = SampleMessageDialog(None)
    sample.Show()
    app.MainLoop()

if __name__ == "__main__":
    main()

在上面的例子中,我们创建了 4 个按钮并将之放置到一个 grid sizer 中。这些按钮将展示 4 个不同的对话框窗口,这些窗口在创建时使用了不同的样式标记。

创建消息对话框比较简单。通过将 parent 参数设置为 None,可以将对话框设置为顶层窗口。接着的两个字符串参数为消息内容和对话框的标题。调用 ShowModal() 函数,可以将对话框显示在屏幕上。

 图2:wx.MessageDialog演示

三、本文知识点

  • 使用wx.MessageBox;
  • 使用wx.MessageDialog。

前一篇:实战wxPython:014 - 系统常用事件

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值