4

このコードを使用して、小さな白黒のビデオ フレームを Tkinter キャンバスに描画しています (10Hz)。

self.image.buf = bytearray(header.width * header.height);
self.image.buf[:] = image
self.image.im = Image.frombuffer("L", (header.width, header.height), self.image.buf).resize((320, 240)).transpose(Image.ROTATE_180)
self.image.tkimage = ImageTk.PhotoImage(self.image.im)
if (self.image.id): self.image.delete(self.image.id);
self.image.id = self.image.create_image((0, 0), image=self.image.tkimage, anchor=NW)

フレームが描画されるたびに、ウィジェットがちらつきます。Tkキャンバスはダブルバッファリングされるべきではありませんか? これを避けるために私は何ができますか?

4

2 に答える 2

1

あなたの質問には、問題が何であるかを特定するのに十分な詳細がないと思います。ちらつきなしで画像を入れ替えることが可能であり、コードがそれほど異常に見えないため、問題の原因となっているコードが他にある可能性があります。

ここで 1 つ試してみてください。繰り返しごとにキャンバス アイテムを削除して再作成する代わりに、itemconfigメソッドを使用して新しい画像を使用するように再構成する 1 つのキャンバス アイテムを使用してみてください。

例えば:

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

また、キャンバスを他の目的で使用していない場合は、キャンバスと画像アイテムではなく、ラベル ウィジェットの使用を検討することをお勧めします。

于 2013-06-06T01:27:39.000 に答える