wxpython中文教程之不用对话框的错误处理

发布时间:2020-05-17编辑:脚本学堂
有关wxpython中不用对话框处理错误消息的方法,wxpython不弹出错误圣诞框的操作例子,wxpython中文教程之如何处理错误消息,需要的朋友参考下。

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 对象.
 

self.timer = wx.Timer(self, ID_TIMER)

接着,新创建的对象绑定到一个特定的方法上 – 在这里就是 OnTimer.
 

self.Bind(wx.EVT_TIMER, self.OnTimer, id=ID_TIMER)

在用户输入了无效命令时,时钟 (timer) 对象有以下代码启动.
 

self.timer.Start(50)

每隔 50 毫秒,OnTimer 方法就被调用一次. 而如果 self.blick 变量等于25时,就通过以下代码来停止时钟:
self.timer.Stop()

如图:

wxpython中文教程之不用对话框的错误处理

图:isabelle.py