You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 00:25:28