Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tkinter画布闪烁_Python_Tkinter_Python Imaging Library - Fatal编程技术网

Python Tkinter画布闪烁

Python Tkinter画布闪烁,python,tkinter,python-imaging-library,Python,Tkinter,Python Imaging Library,我正在用这段代码(10Hz)在Tkinter画布上绘制小的黑白视频帧 每次画框时,小部件都会闪烁。Tk画布不应该是双缓冲的吗?我能做些什么来避免这种情况?我认为你的问题中没有足够的细节来确定问题是什么。可以在不闪烁的情况下交换图像,并且您的代码看起来也不会太不寻常,因此您的代码中可能存在导致问题的其他内容 这里有一件事需要尝试:不要每次迭代都删除和重新创建画布项,而是尝试使用一个画布项,您可以使用itemconfig方法重新配置该画布项以使用新图像 例如: if self.image.id is

我正在用这段代码(10Hz)在Tkinter画布上绘制小的黑白视频帧


每次画框时,小部件都会闪烁。Tk画布不应该是双缓冲的吗?我能做些什么来避免这种情况?

我认为你的问题中没有足够的细节来确定问题是什么。可以在不闪烁的情况下交换图像,并且您的代码看起来也不会太不寻常,因此您的代码中可能存在导致问题的其他内容

这里有一件事需要尝试:不要每次迭代都删除和重新创建画布项,而是尝试使用一个画布项,您可以使用
itemconfig
方法重新配置该画布项以使用新图像

例如:

if self.image.id is None:
    self.image.id = self.image.create_image(...)
else:
    self.image.itemconfig(self.image.id, image=self.image.tkimage)

此外,如果您不使用画布,您可能需要考虑使用标签小部件而不是画布和图像项目。 所以我发现了问题所在——似乎您必须从运行tk的同一线程创建tkimage,否则会发生不好的事情。感谢所有看过这个的人

嗯……我把代码改成使用itemconfig,这似乎更正确。但是,图像仍然会闪烁。我还尝试使用了一个标签,它稍微简单一点,但仍然闪烁。您可能应该将自己的答案标记为已接受的答案,以便稍后出现的任何人都能清楚地看到解决方案。我会尽我所能--StackOverflow要求24小时的等待时间。
if self.image.id is None:
    self.image.id = self.image.create_image(...)
else:
    self.image.itemconfig(self.image.id, image=self.image.tkimage)