使用Tkinter创建一个主窗口,并在该窗口中输入一个数量值、长宽值和间隔值。然后使用这些值在子窗口生成可移动的矩形,并确保每个矩形之间的距离等于间隔值
时间: 2024-03-20 15:41:41 浏览: 56
好的,下面是一个示例代码,可以实现您的要求:
```python
import tkinter as tk
class Rectangle:
def __init__(self, canvas, x, y, width, height, color):
self.canvas = canvas
self.rectangle = canvas.create_rectangle(x, y, x+width, y+height, fill=color)
self.width = width
self.height = height
self.x = x
self.y = y
def move(self, dx, dy):
self.canvas.move(self.rectangle, dx, dy)
self.x += dx
self.y += dy
class Application:
def __init__(self, master):
self.master = master
self.canvas = tk.Canvas(master, width=500, height=500)
self.canvas.pack()
self.num_rectangles = tk.Entry(master)
self.num_rectangles.pack()
self.width = tk.Entry(master)
self.width.pack()
self.height = tk.Entry(master)
self.height.pack()
self.spacing = tk.Entry(master)
self.spacing.pack()
self.generate_button = tk.Button(master, text="Generate", command=self.generate_rectangles)
self.generate_button.pack()
self.rectangles = []
def generate_rectangles(self):
num_rectangles = int(self.num_rectangles.get())
width = int(self.width.get())
height = int(self.height.get())
spacing = int(self.spacing.get())
x = spacing
y = spacing
for i in range(num_rectangles):
rectangle = Rectangle(self.canvas, x, y, width, height, "blue")
self.rectangles.append(rectangle)
x += width + spacing
self.master.after(1000, self.move_rectangles)
def move_rectangles(self):
spacing = int(self.spacing.get())
for i, rectangle in enumerate(self.rectangles):
if i == 0:
rectangle.move(5, 0)
else:
previous_rectangle = self.rectangles[i-1]
distance = previous_rectangle.x + previous_rectangle.width + spacing - rectangle.x
rectangle.move(distance, 0)
self.master.after(100, self.move_rectangles)
root = tk.Tk()
app = Application(root)
root.mainloop()
```
在这个示例中,我们创建了一个名为`Rectangle`的类,该类表示一个可移动的矩形。我们还创建了一个名为`Application`的类,该类表示我们的应用程序。在这个类中,我们创建了一个主窗口,并添加了四个文本框和一个生成按钮。当用户点击生成按钮时,我们将获取文本框中输入的值,并使用这些值来生成矩形。
为了确保矩形之间的距离等于间隔值,我们使用`move_rectangles`函数来移动每个矩形。对于第一个矩形,我们将其向右移动5个像素。对于其他矩形,我们将计算前一个矩形的位置,并将当前矩形移动到该位置加上间隔值的位置。这样,我们就可以确保每个矩形之间的距离等于间隔值。
请注意,在这个示例中,我们使用`after`函数来定期调用`move_rectangles`函数。这样可以确保每个矩形都会移动,而不阻塞主线程。如果您有任何疑问,请随时问我。
阅读全文