Python Tkinter中的Borderwidth属性不起作用

Python Tkinter中的Borderwidth属性不起作用,python,python-3.x,tkinter,tkinter-canvas,Python,Python 3.x,Tkinter,Tkinter Canvas,我试图使用borderwidth属性仅突出显示png图像的“新游戏”部分,但是,它不起作用,我如何解决此错误 from tkinter import * from PIL import ImageTk, Image root = Tk() root.iconbitmap('unnamed.ico') root.title('2048') bg = ImageTk.PhotoImage(Image.open("welcome.png")) new_game_btn = I

我试图使用borderwidth属性仅突出显示png图像的“新游戏”部分,但是,它不起作用,我如何解决此错误

from tkinter import *
from PIL import ImageTk, Image

root = Tk()
root.iconbitmap('unnamed.ico')
root.title('2048')


bg = ImageTk.PhotoImage(Image.open("welcome.png"))
new_game_btn = ImageTk.PhotoImage(Image.open("image_40.png"))

my_canvas = Canvas(root, width=780, height=550)
my_canvas.pack()
my_canvas.create_image(0, 0, image=bg, anchor=NW)

button1 = Button(root, image=new_game_btn, borderwidth=00, relief=FLAT)
button1_window = my_canvas.create_window(100, 100, anchor=NW, window=button1)
root.mainloop()

您唯一的选择似乎是将图像绘制到画布上,而不是创建按钮(因为Tkinter中的小部件不支持透明度)

缺点是,您必须检查画布上的鼠标坐标,以查看是否单击了“按钮”

代码如下所示:

从PIL导入ImageTk,图像
root=Tk()
root.iconbitmap('unnamed.ico')
root.title('2048')
bg=ImageTk.PhotoImage(Image.open(“welcome.png”))
new_game_btn=ImageTk.PhotoImage(Image.open(“Image_40.png”))
我的画布=画布(根,宽度=780,高度=550)
我的画布包()
我的画布。创建图片(0,0,图片=bg,锚点=NW)
我的画布。创建图片(100100,图片=new\u游戏\u btn,锚=NW)
root.mainloop()
这导致(不介意输入错误…):

如果要检查画布的该部分是否被单击,我只需检查如下边界框:

从tkinter导入*
从PIL导入ImageTk,图像
x_位置=100
y_pos=100
宽度=100
高度=100
def回调(事件):
打印(“在画布上单击”,event.x,event.y)
如果(事件x>x位置和事件xy位置,事件y
你的边框宽度是
borderwidth=00
所以它是零。我看了一段youtube视频,视频中有人说,对borderwidth应用零没有边框宽度,所以我想如果我也这样做的话,只会显示蓝色内部的部分,但它仍然显示一些不需要的边框,尽管它是png文件,如果这不是方法,那么是什么?非常感谢。起初我不理解你的问题。尝试从图像中删除背景(使其透明)。是的,前面的图像实际上是一个透明的png图像,但它仍然会生成边框。您可以在图像项上使用
tag_bind()
,而不是在画布上绑定。嘿,@frankenaaps,我知道您建议将画布的该部分用作按钮,就像在窗口的某个范围内被光标点击,它会显示“按钮被点击(大约)”,我的问题是,为了解决这个问题,我需要在上面的程序中更改哪些维度?这取决于你的图像以及你将它放在画布上的位置。如果您只对一个近似按钮(例如图像的外部尺寸)满意,您也可以使用@acw1668 s方法,无需设置按钮的坐标和大小。但是,如果要更精确地进行检查,也可以使用圆或椭圆作为边界框。