wxPython 窗口在 RPi 上随机冻结,之后表现得很奇怪



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

我的程序的简短描述:

进入主循环后,当按下指定的按钮时,程序会进入第二个线程,其中包含另一个循环(称为 requestloop(。再次按下按钮可以离开请求循环。此请求循环每 10 秒通过 url 请求一个 xml 表,然后使用 ElementTree 解析,排序并显示在 wx.grid.Grid 中。我使用网格。强制刷新以确保网格已更新。

我希望以下片段有助于理解上述内容:

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窗口在传递请求循环大约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 在 Raspbian 上不稳定吗?还是构建部分失败?还是 RPi 没有足够的渲染能力?

使用 wx 解决了它。CallAfter 在 update(( 方法的详细信息中。

最新更新