在python编程中,当应用程序有错误发生时,通常会弹出一个错误对话框。
如何在处理错误消息时,不弹出错误对话框呢,来看在wxpython中是如何实现的吧。
专题:wxpython中文教程
例子:
 
#!/usr/bin/python
#coding=utf-8
#Isabelle.py
import wx
ID_TIMER = 1
ID_EXIT = 2
ID_ABOUT = 3
ID_BUTTON = 4
class Isabelle(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title)
        
        self.timer = wx.Timer(self, ID_TIMER)
        self.blick = 0
        
        file = wx.Menu()
        file.Append(ID_EXIT, '退出(&QtCtrl+Q)', '退出 Isabelle')
        
        help = wx.Menu()
        help.Append(ID_ABOUT, '关于(&A)', '0 Programe')
        
        menubar = wx.MenuBar()
        menubar.Append(file, '文件(&F)')
        menubar.Append(help, '帮助(&H)')
        self.SetMenuBar(menubar)
        
        toolbar = wx.ToolBar(self, -1)
        self.textctrl = wx.TextCtrl(toolbar, -1, size=(100, -1))
        button = wx.Button(toolbar, ID_BUTTON, 'Ok', size=(40, 28))
        toolbar.AddControl(self.textctrl)
        toolbar.AddSeparator()
        toolbar.AddControl(button)
        toolbar.Realize()
        self.SetToolBar(toolbar)
        
        self.Bind(wx.EVT_BUTTON, self.OnLaunchCommandOk, id=ID_BUTTON)
        self.Bind(wx.EVT_MENU, self.OnAbout, id=ID_ABOUT)
        self.Bind(wx.EVT_MENU, self.OnExit, id=ID_EXIT)
        self.Bind(wx.EVT_TIMER, self.OnTimer, id=ID_TIMER)
        
        self.panel = wx.Panel(self, -1, (0, 0), (500, 300))
        self.panel.SetBackgroundColour("GRAY")
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.panel, 1, wx.EXPAND)
        self.SetSizer(self.sizer)
        self.statusbar = self.CreateStatusBar()
        self.statusbar.SetStatusText('欢迎来到 Isabelle')
        self.Center()
        self.Show(True)
        
    def OnExit(self, event):
        dlg = wx.MessageDialog(self, '确定要退出 Isabelle?', '请确认', 
                               wx.YES_NO|wx.NO_DEFAULT|wx.ICON_QUESTION)
        if dlg.ShowModal() == wx.ID_YES:
            self.Close()
        
    def OnAbout(self, event):
        dlg = wx.MessageDialog(self, 'Isabelletn' '2014t', '关 于', 
                               wx.OK|wx.ICON_INFORMATION)
        dlg.ShowModal()
        dlg.Destroy()
    def OnLaunchCommandOk(self, envent):
        input = self.textctrl.GetValue()
        if input == '/bye':
            self.OnExit(self)
        elif input == '/about':
            self.OnAbout(self)
        elif input == '/beep':
            wx.Bell()
        else:
            self.statusbar.SetBackgroundColour('RED')
            self.statusbar.SetStatusText('未知命令')
            self.statusbar.Refresh()
            self.timer.Start(50)
            
        self.textctrl.Clear()
        
    def OnTimer(self, event):
        self.blick += 1
        if self.blick == 25:
            self.statusbar.SetBackgroundColour('#E0E2EB')
            self.statusbar.Refresh()
            self.timer.Stop()
            self.blick = 0
            
      
app = wx.App()
Isabelle(None, -1, 'Isabelle')
app.MainLoop()
 
在工具栏上有一个 wx.TextCtrl 部件. 
这里可以输入命令. 定义了三个命令. “/bye”、“/about” 以及 “/beep”. 如未能正确输入三个之一, 状态栏就会变成红色,并且显示一条错误信息.
这是通过 wx.Timer 对象完成的.
首先,要创建一个 wx.Timer 对象.
 
接着,新创建的对象绑定到一个特定的方法上 – 在这里就是 OnTimer.
 
在用户输入了无效命令时,时钟 (timer) 对象有以下代码启动.
 
每隔 50 毫秒,OnTimer 方法就被调用一次. 而如果 self.blick 变量等于25时,就通过以下代码来停止时钟:
self.timer.Stop()
如图:

图:isabelle.py