1

何らかの理由で、Tkinter キャンバスで create_window に移動すると、以前にそのウィンドウにあったものがすべて消去され、ウィンドウが左上隅に詰まってしまいます (別の場所に設定しても.

canvas.create_window(30, height - 40, anchor = NW, width = 40,
    window = canvas.data.buildSquareButton)

先行する

canvas.create_rectangle(0,0,width, 40, fill = "#888888888",
                        outline = "#888888888")
canvas.create_rectangle(0, height, width, (height-40), fill = "#888888888",
                        outline = "#888888888")
canvas.create_rectangle(0, 40, width, (height - 40), fill = "#fffffffff",
                        outline = "#fffffffff")

そして画像。

create_window の後に 1 秒の time.sleep を挿入すると、ボタンが適切な場所に配置されていることがわかりました。その後、time.sleep が終了すると、ボタンが右上隅に投げ込まれ、四角形は表示されませんでした。ウィンドウをコメントアウトすると、長方形がうまく表示されました。

ウィンドウを呼び出すときに何か間違ったことをしていますか、それとも Tkinter の不具合がありますか?

4

2 に答える 2

0

あなたの質問には、確実に知るのに十分な情報がありません。ただし、私の推測では、キャンバス内のウィジェットをpacking またはing しているため、キャンバスが内容に合わせて縮小されています。gridまたは、キャンバスを縮小するために何か他のことをしています。

問題をさらに悪化させるのは、おそらくキャンバスの背景色がメイン ウィンドウと同じであるため、内容が消去されていると考えていても、実際にはキャンバス自体ではなく、キャンバスが含まれるウィジェットを見ているということです。

その理論を証明または反証するために、キャンバスに鮮やかな赤などの派手な背景色を付けます。次に、コードを実行して、画面の赤い部分がどうなるかを確認します。

結論: tkinter には、説明した動作を引き起こすバグはありません。表示されていない一部のコードにバグがあります。

最善の方法は、問題を再現する最小のプログラムを作成することです。これを行おうとするだけで、コードのバグが露呈する可能性があります。12 行または 2 行のコードで再現できる場合は、質問を更新してください。エラーを特定できる可能性があります。

于 2013-07-24T00:41:26.407 に答える
-1

あなたの質問が何であるかは完全にはわかりませんが、コードのある時点でキャンバスウィジェットからすべてを削除して、他のものがそれをオーバーライドできるようにしようとしているようです。

これを試してキャンバスをリセットしてください:canvas.delete("all")

于 2013-07-24T01:21:49.277 に答える