web-dev-qa-db-ja.com

tkinterキャンバスの背景を透明にする方法は?

私はチェスプログラムを作っていますが、ピースをドラッグできるようにしたいと思っています。これを行うために、作品の画像をCanvasに置いてドラッグできるようにします(必要に応じてLabelを使用することもできます)。ただし、ピースをドラッグすると、ピースの画像を囲む白い正方形が表示されます。

enter image description here

私が問題を調査したとき、多くの人々がこの解決策を与えました:

drag_canvas = Canvas(self, height=80, width=80, bg="yellow")
root.wm_attributes("-transparentcolor", "yellow")

これにより背景が透明になりましたが、表示されたのはチェス盤ではなく、GUIの背後にあるプログラムでした。

enter image description here

Tkinterウィンドウの背後にあるプログラムではなく、背景を透明にしてチェス盤を背後に表示する方法はありますか?

注:他のウィジェット(例:Label)を使用してもかまいませんが、このプログラムは次のようにする必要があるため、デフォルトでPython(PILなし)のモジュールを使用する必要があります。他のモジュールをダウンロードできない環境で使用されます。

3
Milan Tom

質問:tkinterキャンバスの背景を透明にする方法は?

背景をゼロに設定するための唯一の可能なconfig(...オプション

c.config(bg='')

結果:_ tkinter.TclError:不明な色名 ""


この結果を得るには:

enter image description here

チェス盤とフィギュアを同じ.Canvas(...内に保持する必要があります。

    self.canvas = Canvas(self, width=500, height=200, bd=0, highlightthickness=0)
    self.canvas.create_rectangle(245,50,345,150, fill='white')

    self.image = tk.PhotoImage(file='chess.png')
    self.image_id = self.canvas.create_image(50,50, image=self.image)

    self.canvas.move(self.image_id, 245, 100)

Pythonでテスト済み:3.5-TkVersion:8.6

6
stovfl