2012-03-06 78 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

我遇到同樣的問題來試圖使用find_closest帆布方法修改現有的矩形,而是簡單地結合到畫布上沒有工作。問題是沒有填充的Tkinter矩形只會響應其邊框上的點擊。

然後我從here閱讀關於點畫參數create_rectangle

點畫:位圖指示如何在矩形的內部將 被斑點狀。

默認爲點畫=「」,這意味着一個純色。甲 典型值是點畫=「gray25」。除非填充 已設置爲某種顏色,否則不起作用。 See Section 5.7, 「Bitmaps」

而位圖部分指出,默認情況下只有少數點畫選項可用,但沒有一個是完全透明的。但是,您可以指定自己的自定義位圖作爲X位圖圖像(.xbm文件)。

XBM文件實際上只是具有類C語法的文本文件,所以我製作了我自己的具有所有透明像素的2x2位圖,並將其作爲transparent.xbm保存在與我的Tkinter腳本相同的目錄中。下面是對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 
) 

注意,你仍然需要提供了一些填充值或點畫不會被應用。實際填充值並不重要,因爲點畫將在畫布中「覆蓋」它。