在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