wxPython窗口在RPi上随机冻结,之后行为怪异。

问题描述 投票:0回答:1

这个问题只发生在RPi(3B+,Raspbian Buster)上。我在Mac上运行该程序没有任何问题。

我的程序的简短描述。

在进入mainloop后,当指定的按钮被按下时,程序会进入另一个循环的线程(称之为requestloop)。再次按下按钮就可以离开requestloop。这个requestloop每隔10秒通过url请求一个xml表,然后用ElementTree解析,排序并显示在wx.grid.Grid中。我使用grid.ForceRefresh来确保网格被更新。

我希望下面的片段能帮助理解上述内容。

    def on_btnrun(self, event):
        global run
        if self.btnrun.Label == "Start":
            run = True
            thrupt = threading.Thread(target=self.thrupdate)
            thrupt.start()
            self.btnrun.SetLabel("Ende")

        elif self.btnrun.Label == "Ende":
            run = False
            self.btnrun.SetLabel("Start")


     def thrupdate(self):
         while run is True:
            reset()
            self.grid.ClearGrid()
            update(self.grid)
            self.grid.ForceRefresh()
            time.sleep(10)

问题。

现在就像标题中提到的那样,整个wx窗口在通过requestloop大约5到20次之后就冻结了。这完全是随机发生的,我找不到任何规律。当我现在打开另一个窗口(例如菜单下拉),在wx窗口上,它将被复制到wx窗口上,并在我关闭它后留在那里。

这里有一些图片可以让你更好的理解我的意思(忽略所有其他我没有提到的小部件,它们只是一些无功能的占位符)。

wx窗口冻结前的图像

wx窗口冻结后的图像

打开和关闭下拉菜单后的wx窗口的图像。

额外信息: 在RPi上构建wxPython时,我得到了一些警告,每次运行程序时都会得到以下警告(它说的是实际时间而不是时间)。

(program.py:1666): Gtk-Critical **: time: gtk_distribute_natural_allocation: assertion ‚extra_space >= 0‘ failed

问题:我不知道为什么会发生这种情况。

我不知道为什么会发生这样的情况,是不是wxPython不稳定?是wxPython在Raspbian上不稳定吗?还是部分编译失败了?还是RPi的渲染能力不够?

raspberry-pi wxpython raspbian wxpython-phoenix
1个回答
0
投票

通过在update()方法的细节中使用wx.CallAfter来解决。

© www.soinside.com 2019 - 2024. All rights reserved.