gpt4 book ai didi

python - 如何在 Tkinter 中创建响应点击事件的透明矩形

转载 作者:太空宇宙 更新时间:2023-11-03 14:31:44 25 4
gpt4 key购买 nike

我需要在 tkinter.canvas 中绘制一个矩形来响应点击事件:

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)

它有效。

此时,我要在 Canvas 上绘制一系列网格,我希望它们被click_area覆盖,所以我需要制作click_area透明。

但是,当我这样写的时候:

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

它不再响应点击。

所以,我的问题是如何使其透明并保持对点击的响应。或者,有没有其他方法可以实现我想要的。

非常感谢。

最佳答案

我在尝试使用 find_closest Canvas 方法修改现有矩形时遇到了同样的问题,但简单地绑定(bind)到 Canvas 是行不通的。问题是没有填充的 Tkinter 矩形只会响应对其边框的点击。

然后我从 here 中了解到 create_rectangle 的点画参数:

stipple: A bitmap indicating how the interior of the rectangle will be stippled.

Default is stipple="", which means a solid color. A typical value would be stipple='gray25'. Has no effect unless the fill has been set to some color. 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
)

请注意,您仍然需要提供一些填充值,否则不会应用点画。实际填充值无关紧要,因为点画会在 Canvas 中“覆盖”它。

关于python - 如何在 Tkinter 中创建响应点击事件的透明矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9581384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com