连续事件触发



我在wxPython中有一个大型GUI应用程序。只要我按下按钮,MessageDialog就会显示一些结果。当单击对话框中的OK和X时,对话框将消失,但是原始按钮的事件将再次触发。因此,对话框被显示第二次,因此它无限地继续。

我的代码(最小化到相关部分):

import wx
from wx import MessageDialog
class Compiler():
    @staticmethod
    def compile(code):
        dialog = MessageDialog(None, code+'nn', caption='Compiler result', style=wx.ICON_ERROR|wx.CENTRE)
        dialog.ShowModal()
class GUI ( wx.Frame ):
    def __init__( self):
        wx.Frame.__init__ ( self, None, id = wx.ID_ANY, title = "Test frame", pos = wx.DefaultPosition, size = wx.Size(200, 300), style = wx.CAPTION|wx.CLOSE_BOX|wx.MINIMIZE_BOX|wx.TAB_TRAVERSAL )
        theSizer = wx.GridBagSizer( 0, 0 )
        self.theButton = wx.Button( self, wx.ID_ANY, "Hit me!", wx.DefaultPosition, wx.DefaultSize, 0 )
        theSizer.Add( self.theButton, wx.GBPosition( 0, 0 ), wx.GBSpan( 1, 1 ), wx.ALL, 5 )       
        self.SetSizer( theSizer )
        self.Layout()
        self.Centre( wx.BOTH )
        self.theButton.Bind( wx.EVT_LEFT_DOWN, self.execute )
    def execute( self, event ):
        event.Skip()
        print 'Button executed!'
        Compiler.compile('any_input');
if __name__ == '__main__':
    app = wx.App(False)
    GUI().Show() # Launch GUI
    app.MainLoop()

点击一次按钮后,点击帧中的任何位置都会导致事件再次触发,为什么会发生这种情况?

代码中真正的bug:

def execute( self, event ):
    event.Skip()
    print 'Button executed!'
    Compiler.compile('any_input');

event.Skip()。它所做的就是不断传播事件。因此,事件在没有任何其他事件处理程序的情况下继续传播,并由此事件处理程序在循环中连续处理和传播。去掉线,它工作得很好!

查看此文档获取更多信息

相关内容

  • 没有找到相关文章

最新更新