gpt4 book ai didi

python - 如何使用平方递归?

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:46 26 4
gpt4 key购买 nike

我有一个问题,如何使用分数坐标递归绘制矩形?我一直在尝试让正方形/矩形每次变小 10%,直到它占据整个 Canvas (这意味着它不能超出板的宽度和高度,或者它只是变为 0,这意味着它不会绘制)任何东西或者太小你都看不到最后的方 block )。或者也许还有另一种方法可以让我以递归的方式绘制正方形,并不断减少一定的百分比?

到目前为止我已经做到了,但我似乎想不出谁让它继续递归,直到它不能再这样做为止。

import tkinter

class draw_squares:
def __init__(self, squares: [(float, float, float, float)]):
self.squares = squares

self.root_window = tkinter.Tk()

self.canvas = tkinter.Canvas(master = self.root_window,
width = 500, height = 500,
background = 'blue')
self.canvas.grid(row=0, column = 0, padx=0, pady = 0,
sticky = tkinter.E + tkinter.W + tkinter.S + tkinter.N)

self.canvas.bind('<Configure>', self._resized)

self.root_window.rowconfigure(0, weight = 1)
self.root_window.columnconfigure(0, weight = 1)

def start(self):
self.root_window.mainloop()

def _resized(self, event: tkinter.Event):
self.draw_squares_recursively()

def draw_squares_recursively(self):
self.canvas.delete(tkinter.ALL)

for x, y, x2, y2 in self.squares:
if x != 0.5 and y != 0.5 and x2 != 0.5 and y2 != 0.5:
self._draw_square(self._draw_square(x-.1,y-.1,x2+.1,y2+.1))

def _draw_square(self, x: float, y:float, x2:float, y2:float):
width = self.canvas.winfo_width()
height = self.canvas.winfo_height()

self.canvas.create_rectangle(
x * width, y * height,
x2 * width, y2 *height, outline = 'grey')

if __name__ == '__main__':
squares = [(0.9, 0.9, 0.1, 0.1), (0.8,0.8,0.2,0.2), (0.7,0.7,0.3,0.3),
(0.6,0.6,0.4,0.4), (0.5,0.5,0.5,0.5)]

app = draw_squares(squares)
app.start()

提前非常感谢您的帮助!

最佳答案

首先,您使用的是 float ,因此(不)等于不是一个好主意 http://www.lahey.com/float.htm draw_squares_recursively() 可以调用自身,直到达到限制。您可以算出算术来获得您想要的尺寸和位置。

class DrawSquares:
def __init__(self, square):
## self.squares = squares

self.root_window = tkinter.Tk()

self.canvas = tkinter.Canvas(master = self.root_window,
width = 500, height = 500,
background = 'blue')
self.canvas.grid(row=0, column = 0, padx=0, pady = 0,
sticky = "nsew")

## self.canvas.bind('<Configure>', self._resized)

self.root_window.rowconfigure(0, weight = 1)
self.root_window.columnconfigure(0, weight = 1)

self.draw_squares_recursively(square)
self.root_window.mainloop()


def draw_squares_recursively(self, square):
##self.canvas.delete(tkinter.ALL)

for value in square:
if value < 0.05 or value > 100:
return

self.canvas.create_rectangle(square[0], square[1],
square[2], square[3],
outline = 'grey', width=2)
square[2] += 20
square[3] += 20
self.draw_squares_recursively(square)

if __name__ == '__main__':
squares = [0.9, 0.9, 10.1, 10.1]
app = DrawSquares(squares)

关于python - 如何使用平方递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35966685/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com