2012-03-06 13 views
3

でイベントをクリックして応答透明の四角形を作成する方法を、私はクリックイベントを応答するtkinter.canvasに四角形を描画する必要があります。Tkinterの

click_area = self.canvas.create_rectangle(0,0,pa_width,pa_height,fill='LightBlue',outline='lightBlue',tags=['A','CLICK_AREA']) 
self.canvas.tag_bind('CLICK_AREA','<Button>',self.onClickArea) 

それが動作します。

この時点では、キャンバスに一連のグリッドを描画しなければなりません。click_areaで覆われているようにして、click_areaを透明にする必要があります。それはもはやクリックするない応答をした

click_area = self.canvas.create_rectangle(0,0,pa_width,pa_height,fill='',outline='lightBlue',tags=['A','CLICK_AREA']) 

:私はこのように書いた

けど、。

私の質問は、透明にしてクリックに反応し続ける方法です。あるいは、私が望むものを実装するための他の方法がありますか?

ありがとうございました。

答えて

3

私はそれを持っていると思う:矩形ではなくキャンバスをバインドする。

解決

self.canvas.bind('<Button>',self.onClickArea) 

問題で

self.canvas.tag_bind('CLICK_AREA','<Button>',self.onClickArea) 

を交換してください。

0

キャンバスメソッドを使用して既存の四角形を修正しようとしたのと同じ問題が発生しましたが、キャンバスへのバインディングは機能しませんでした。問題は、塗りつぶしのないTkinterの矩形は、その境界線のクリックにのみ反応することです。長方形の内部が 点描されるかを示すビットマップ:

点描:

は、それから私は、hereからcreate_rectangleに点描引数について読みました。

デフォルトはstipple = ""です。これは単色を意味します。 典型的な値はstipple = 'gray25'です。塗りつぶし が何らかの色に設定されていない限り、効果はありません。 See Section 5.7, “Bitmaps”

ビットマップのセクションでは、既定ではいくつかのスティプルオプションしか使用できませんが、完全に透明ではありません。ただし、は、独自のカスタムビットマップをXビットマップイメージ(.xbmファイル)として指定します。

XBMファイルはCのような構文のテキストファイルなので、私は2x2ビットマップをすべての透明ピクセルで作成し、Tkinterスクリプトと同じディレクトリにtransparent.xbmという名前で保存しました。ここではXBMファイルのコードは次のとおりです。

#define trans_width 2 
#define trans_height 2 
static unsigned char trans_bits[] = { 
    0x00, 0x00 
}; 

その後、あなたはあなたの四角形を作成する際に@xbmファイル名を付けることによって、カスタム点描を指定することができます。

self.canvas.create_rectangle(
    x1, 
    y1, 
    x2, 
    y2, 
    outline='green', 
    fill='gray', # still needed or stipple won't work 
    stipple='@transparent.xbm', 
    width=2 
) 

注意を、あなたはまだする必要がありいくつかの塗りつぶし値を指定しても、スティプルは適用されません。スティプルがキャンバス内でそれを「上書き」するので、実際の塗りつぶし値は重要ではありません。