来自事件和CallLater的Wx Python调用函数

时间:2018-07-10 12:35:17

标签: python-3.x wxpython

我有一个名为OnShowCustomDialog的函数,我想用2种不同的方法来调用,一种是用鼠标单击按钮,另一种是在一段时间后(如果未发生单击的话)

由于参数存在差异,我可以使用相同的代码来执行一项或多项操作,但是,如果我从函数参数中删除“事件”,则单击不起作用,并且如果我保留了它,则基本上无法执行,CallLater将无法使用

我可以创建一个新功能来解决其他情况,但是我敢肯定有一个简单的解决方案我找不到

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(300,300))

        panel = wx.Panel(self, -1)
        wx.Button(panel, 1, 'Show Custom Dialog', (100,100))
        self.Bind (wx.EVT_BUTTON, self.OnShowCustomDialog, id=1)

        wx.CallLater(1000, self.OnShowCustomDialog)

    def OnShowCustomDialog(self, event):
        dia = MyDialog(self, -1, 'buttons')
        dia.Show()
        wx.CallLater(4000, dia.Destroy)

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'customdialog1.py')
        frame.Show(True)
        frame.Centre()
        return True

app = MyApp(0)
app.MainLoop()

1 个答案:

答案 0 :(得分:2)

您将事件设置为可选,然后它应可同时用于两个呼叫。

def OnShowCustomDialog(self, event=None):
    dia = MyDialog(self, -1, 'buttons')
    dia.Show()
    wx.CallLater(4000, dia.Destroy)

迈克尔