python - 在长任务wxpython期间,禁用的按钮仍然捕获点击
问题描述
禁用按钮在长时间任务期间仍会捕获点击。在长任务期间,该按钮呈灰色显示,但如果您在长任务期间单击它,则在长任务完成后会触发单击事件。例如
def onClick(self, evt):
self.btn.Disable()
for i in range (1000):
print i
self.btn.Enable()
Button 在执行长for循环之前会禁用自身,但是如果我们在 for 循环期间单击按钮,它会再次启动 for 循环,因为它会在 for 循环结束后再次调用onClick函数。
知道如何禁用点击事件吗?
解决方案
尽管我怀疑您是否应该以这种方式编写长时间运行的事件,但您可以通过Unbind
单击按钮来实现您想要的,执行长时间运行的任务,Yield
用完任何后续按钮单击,然后在任务结束Bind
再按一次按钮。IE
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()
推荐阅读
- flutter - 如何使用颤振在android中使用已安装的应用程序
- selenium - 我的测试用例成功通过,但由于 0-SNAPSHOT.jar 不在 jenkins maven 项目中,构建失败
- javascript - 使用 Nextjs 和 GSAP 悬停在标题上动态显示图像
- node.js - 为“/favorites”URI 实现 Express router(),使其支持 GET、POST 和 DELETE 操作
- javascript - <> 和之间的区别
- java - 模拟来自父类的方法以返回模拟数据
- azure - 如何测量我在 Azure 认知服务语音合成 (TTS) 中使用的字符?
- python - 如何不断更新熊猫数据框中的新值
- airflow - 开始时间/结束时间的气流 ts 宏
- javascript - 带有 [对象对象] 的文本区域