Хотя у меня есть сомнения по поводу того, следует ли вам кодировать ваше длинное работающее событие таким образом, вы можете достичь того, что хотите, используя Unbind
при нажатии кнопки, выполнить долгосрочное задание, используя Yield
, чтобы использоватьдо любого последующего нажатия кнопки, а затем в конце задания Bind
снова до кнопки.т.е.
import wx
import time
class ButtonFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None)
self.btn = wx.Button(self, -1, "Click Me")
self.btn.Bind(wx.EVT_BUTTON, self.onClick)
self.Centre()
self.Show()
def onClick(self, event):
self.btn.Unbind(wx.EVT_BUTTON)
for i in range (10):
time.sleep(1)
print( i )
wx.GetApp().Yield() # Yielding allows button events to be used up
self.btn.Bind(wx.EVT_BUTTON, self.onClick)
print ("Accepting clicks again")
if __name__ == "__main__":
app = wx.App()
ButtonFrame()
app.MainLoop()