Python 为什么这个画布一个像素太大?
MCVEPython 为什么这个画布一个像素太大?,python,canvas,tkinter,Python,Canvas,Tkinter,MCVE import Tkinter as tk root = tk.Tk() canvas = tk.Canvas(root, width=100, height=100) canvas.grid(row=0, column=0) def print_click(event): print event.x, event.y canvas.bind('<Button-1>', print_click) root.mainloop() 将Tkinter作为tk导入
import Tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, width=100, height=100)
canvas.grid(row=0, column=0)
def print_click(event):
print event.x, event.y
canvas.bind('<Button-1>', print_click)
root.mainloop()
将Tkinter作为tk导入
root=tk.tk()
canvas=tk.canvas(根,宽度=100,高度=100)
canvas.grid(行=0,列=0)
def打印单击(事件):
打印事件.x,事件.y
canvas.bind(“”,打印\单击)
root.mainloop()
问题
单击左上方的画布将打印(0,0)
单击右下角的画布将打印
(100100)
。我期望(99,99)
这意味着画布实际上是101像素宽和高,而不是100像素
在我的真实程序中,我在画布上显示一个数组(作为图像),需要精确的单击位置。如果基础映像中不存在该位置(即100x100阵列的(100100)
),程序将崩溃
问题
宽度和高度的画布时,这里的简单修复方法是从宽度和高度中减去1吗
除了
width
和height
属性之外,还有其他因素影响小部件的整体宽度和高度。例如,borderwidth
和highlightthickness
都会影响小部件的总体大小。因为您没有将这些设置为零,所以您依赖于平台的默认值,而这些默认值显然不是零
您需要将这些属性显式设置为零:
canvas = tk.Canvas(root, width=100, height=100, highlightthickness=0, borderwidth=0)
在将
borderwidth
和highlightthickness
显式设置为零后,您是否尝试过复制结果?这两个因素都影响了画布的整体宽度和高度。@BryanOakley不,我没有。但我会立即尝试。@BryanOakleyhighlightthickness=0
解决了这个问题!非常感谢,请随时发布答案。