web-dev-qa-db-ja.com

Canvasウィジェットの周りの薄い灰色の境界線を削除するにはどうすればよいですか?

私は、Tkinter Canvasウィジェットをいじって、見た目に美しいウィジェットを作成できるかどうかを確認してきましたが、いくつか質問があります。

まず、Canvasウィジェットの周囲に薄い灰色の枠線があるのはなぜですか、どうすれば取り除くことができますか?

第二に、なぜキャンバス(2,2)の一番左上にあるのですか? (0,0)のようです。

私の現在のスクリプト:

from Tkinter import *

master = Tk()
master.configure(bg='black')
master.wm_attributes("-topmost", 1)

w = Canvas(master, width=150, height=40, bd=0,relief='ridge',)
w.pack()

color = 100
x0 = 2
y0 = 2
x1 = 151
y1 = 2

while y0 < 20 :
    r = color
    g = color
    b = color
    rgb = r, g, b
    Hex = '#%02x%02x%02x' % rgb
    w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1)
    color = color - 2
    y0 = y0 + 1
    y1 = y1 + 1

color = 10

while y0 < 40 :
    r = color
    g = color
    b = color
    rgb = r, g, b
    Hex = '#%02x%02x%02x' % rgb
    w.create_line(x0, y0, x1, y1,fill=str(Hex), width=1)
    color = color + 4
    y0 = y0 + 1
    y1 = y1 + 1

mainloop()
36
rectangletangle

セクション6.8キャンバスが0,0で始まらないように見えるのはなぜですか?Tkの使用に関するFAQ の現象について説明しています。

投稿されたソースにわずかな変更を加えることで、ボーダーアーティファクトを排除することができました...

これを変える:

_w = Canvas(master, width=150, height=40, bd=0, relief='ridge')
w.pack()
_

に:

_w = Canvas(master, width=150, height=40, bd=0, highlightthickness=0, relief='ridge')
w.pack()
_

この:

_x0 = 2
y0 = 2
x1 = 151
y1 = 2
_

に:

_x0 = 0
y0 = 0
x1 = 150
y1 = 0
_

興味深いことに、_"borderwidth"_属性は違いをもたらしませんでしたが、[〜#〜] faq [〜#〜]に従ってそれを残しました。

Canvas初期化ステートメントの直後にw.config()を実行すると、highlightthicknessのデフォルトが2であることが示されましたおよびfor _border width_。

48
T.P.

簡単に言えば、キャンバスにはエッジに影響を与える2つのコンポーネントがあります。ボーダー(borderwidth属性)とハイライトリング(highlightthickness属性)です。

ボーダーの幅がゼロでハイライトの厚さがゼロの場合、キャンバス座標は0,0から始まります。それ以外の場合、キャンバスのこれら2つのコンポーネントは座標空間を侵害します。

私が最も頻繁に行うことは、これらの属性をzeroに設定することです。次に、実際に境界線が必要な場合は、そのキャンバスをフレーム内に配置して、フレームに境界線を付けます。

12
Bryan Oakley