wxpython textcrl和无限循环问题

2024-04-26 10:28:24 发布

您现在位置:Python中文网/ 问答频道 /正文

由于某种原因,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语句工作得很好。你知道为什么会这样吗?在


Tags: 代码readlinetimethissersplitprintwhile
2条回答

GUI程序的工作原理是有一个无限循环,从队列中提取事件并执行它们。除了用户生成的事件(如按钮按下),还有一些低级事件告诉小部件自己绘制。除非这些事件得到处理,否则即使您修改了它们的属性(如更改颜色、添加文本等),窗口也不会重画。因为您有自己的无限循环,所以您正在阻止这些低级事件被处理。在

一个简单的解决方案是,从自己的循环中提取事件并处理它们。由于已经有一个无限循环正在运行(“事件循环”),一个更好的解决方案是不要编写自己的无限循环。相反,使用wx.CallAfterwx.CallLater添加处理低级别事件后要执行的工作(即:当GUI为“空闲”时)

实际上,对wx.CallAfter的每次调用都是您自己循环的一次迭代。在

我怀疑wxpython在其主循环中需要进行一些处理(调度事件等等)。但在从事件处理程序返回之前,该循环无法运行。最好设置一个定时器来定期更新文本控件。在

你应该用wx定时器而不是无限循环。探索的另一个选择是wx.产量. 在

相关问题 更多 >