Tkinter使用负坐标绘制矩形失败问题求助
Tkinter Canvas负坐标矩形无法显示的解决办法
问题原因
Tkinter Canvas的默认坐标系是左上角为原点(0,0),y轴数值向下递增。你设置的红色矩形y坐标为-200到-100,这个区域在画布可视范围(y值0到300)的上方,所以不会被显示出来。
解决方案
有两种常用处理方式:
1. 调整坐标到画布可视范围内
如果只是想让红色矩形和绿色矩形上下排列,把红色矩形的y坐标改成正数且在0到300之间即可。比如要放在绿色矩形上方,可设置坐标为50, 0, 150, 50;要放在下方则用50, 100, 150, 150:
from tkinter import * mainWindow = Tk() drawingCanvas = Canvas(mainWindow, width=300, height=300) drawingCanvas.pack() # 绿色矩形(原位置) drawingCanvas.create_rectangle(50, 25, 150, 75, fill="green") # 红色矩形(调整到绿色上方的可视区域) drawingCanvas.create_rectangle(50, 0, 150, 50, fill="red") mainloop()
2. 保留负坐标,扩展画布可视区域
如果必须使用负坐标,可以通过设置scrollregion让画布包含负坐标区域,再滚动到对应位置显示:
from tkinter import * mainWindow = Tk() drawingCanvas = Canvas(mainWindow, width=300, height=300) drawingCanvas.pack() drawingCanvas.create_rectangle(50, 25, 150, 75, fill="green") # 保留负坐标的红色矩形 red_rect = drawingCanvas.create_rectangle(50, -200, 150, -100, fill="red") # 设置画布滚动区域,包含所有绘制元素 drawingCanvas.config(scrollregion=drawingCanvas.bbox("all")) # 滚动到红色矩形所在位置 drawingCanvas.yview_moveto(0) mainloop()
若需要手动滚动查看,还可以添加滚动条组件配合画布使用。
内容的提问来源于stack exchange,提问作者ba3sian
相关产品推荐
相关产品推荐

