我目前正在更改我的椭圆工具的工作方式,因为之前的工作方式不正确。我正在使用python 2.7.5和pygame为我的绘图程序创建它。我最近遇到了这个错误:
Traceback (most recent call last):
File "C:\Users\Wisdom1\Desktop\Comp Science Files\Canvas.py", line 164, in <module>
draw.ellipse(screen,(c),(x,y,radx,rady),sz2)
ValueError: width greater than ellipse radius
当我尝试在每个方向上创建一个椭圆,除了从一个点向右下方之外,就会发生这种情况。我理解错误,我不知道如何解决它。这是我的椭圆工具:
if mb[0] == 1 and canvas.collidepoint(mx,my):
screen.set_clip(canvas)
if tool == "ellipse":
screen.blit(copy,(0,0))
radx = max(mx-x,1)
rady = max(my-y,1)
draw.ellipse(screen,(c),(x,y,radx,rady),sz2)
screen.set_clip(None)
Sz2是一个大小变量,从10开始,每次向下或向上移动鼠标滚轮时减少或增加3。任何帮助表示赞赏。谢谢
答案 0 :(得分:1)
您还可以使用以下形式的三元语句:
draw.ellipse(screen,(c),(x,y,radx,rady), sz2 if sz2 < max(radx, raxy) else 0)
此致
另一位梅西学生在周日晚上工作;)
答案 1 :(得分:0)
如果sz2
(曲线的粗细)大于椭圆的小半径,则pygame会引发ValueError
。因此,您可以使用if-statement
:
if sz2 < min(radx, rady)//2:
pygame.draw.ellipse(self.screen, green, box, sz2)
else:
# sz2=0 fills the ellipse
pygame.draw.ellipse(self.screen, green, box, 0)
radx
,rady
是限定椭圆的Rect
的宽度和高度。因此,小半径是radx
和rady
的一半。
以下是一些可运行的代码,显示if-statement
有效:
"""Based on http://www.pygame.org/docs/tut/intro/intro.html"""
import sys
import pygame
pygame.init()
size = (width, height) = (320, 240)
screen = pygame.display.set_mode(size)
black = (0,0,0)
green = [0, 255, 0]
radx, rady = 50, 70
box = [160-radx//2, 120-rady//2, radx, rady]
width = 1
delta = 2
while True:
for event in pygame.event.get():
if ((event.type == pygame.QUIT) or
(event.type == pygame.KEYDOWN and
event.key == pygame.K_ESCAPE)):
sys.exit()
screen.fill(black)
if 0 < width < min(radx, rady)//2:
pygame.draw.ellipse(screen, green, box, width)
else:
if width > 0:
pygame.draw.ellipse(screen, green, box, 0)
delta *= -1
width += delta
pygame.display.flip()
pygame.time.delay(100)