由于某种原因,textcrl在无限循环中时不起作用,我的代码如下:
while 1:
localtime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
i = i + 1
#print str(i)
serRead = ser.readline()
serSplit = serRead.split(",")
#this works
print str(i)+', '+tempOrShock+', '+localtime+', '+serSplit[1]
#this doesn't
self.displayTextCtrl.WriteText(str(i)+', '+tempOrShock+', '+
localtime+', '+serSplit[1])
这个无限while循环在一个button click事件中,我基本上是在一个按钮被点击后运行一个无限循环,告诉textcrl不断地写出东西,但是它不起作用。但是,print语句工作得很好。你知道为什么会这样吗?在
GUI程序的工作原理是有一个无限循环,从队列中提取事件并执行它们。除了用户生成的事件(如按钮按下),还有一些低级事件告诉小部件自己绘制。除非这些事件得到处理,否则即使您修改了它们的属性(如更改颜色、添加文本等),窗口也不会重画。因为您有自己的无限循环,所以您正在阻止这些低级事件被处理。在
一个简单的解决方案是,从自己的循环中提取事件并处理它们。由于已经有一个无限循环正在运行(“事件循环”),一个更好的解决方案是不要编写自己的无限循环。相反,使用
wx.CallAfter
或wx.CallLater
添加处理低级别事件后要执行的工作(即:当GUI为“空闲”时)实际上,对
wx.CallAfter
的每次调用都是您自己循环的一次迭代。在我怀疑wxpython在其主循环中需要进行一些处理(调度事件等等)。但在从事件处理程序返回之前,该循环无法运行。最好设置一个定时器来定期更新文本控件。在
你应该用wx定时器而不是无限循环。探索的另一个选择是wx.产量. 在
相关问题 更多 >
编程相关推荐