编写一个应用程序,除了主线程外,还有两个线程:first和second。First负责模拟一个红色方框从坐标(10,60)运动到(100,60);second负责模拟一个绿色方框从坐标(100,60)运动到(200,60)。
时间: 2024-01-28 15:03:27 浏览: 59
QT中利用TCP协议实现了一个多线程的文件互传系统
5星 · 资源好评率100%
好的,我理解了您的要求。以下是一个用 Python 实现的示例程序,其中使用了 threading 库来创建和控制线程,以及 tkinter 库来创建图形界面:
```python
import threading
import tkinter as tk
class MovingBox:
def __init__(self, canvas, color, x1, y1, x2, y2, dx):
self.canvas = canvas
self.obj = canvas.create_rectangle(x1, y1, x2, y2, fill=color)
self.dx = dx
def move(self):
while True:
x1, _, x2, _ = self.canvas.coords(self.obj)
if x2 >= 200:
break
self.canvas.move(self.obj, self.dx, 0)
self.canvas.update()
# 模拟运动的延迟
self.canvas.after(50)
def main():
root = tk.Tk()
root.geometry("300x150")
canvas = tk.Canvas(root, width=300, height=100)
canvas.pack()
first = MovingBox(canvas, "red", 10, 20, 60, 80, 5)
second = MovingBox(canvas, "green", 100, 20, 150, 80, 5)
def start_threads():
# 创建并启动线程
t1 = threading.Thread(target=first.move)
t2 = threading.Thread(target=second.move)
t1.start()
t2.start()
button = tk.Button(root, text="Start", command=start_threads)
button.pack()
root.mainloop()
if __name__ == "__main__":
main()
```
在这个程序中,我们首先定义了一个 MovingBox 类来表示运动的方框,其中包括了方框的位置、颜色和运动速度等属性,以及一个 move() 方法来模拟方框的运动过程。在 move() 方法中,我们使用了一个 while 循环来不断更新方框的位置,直到它到达了终点位置。
然后,在主函数中,我们创建了一个 tkinter 窗口,并在其中添加了一个画布和一个“开始”按钮。当用户点击“开始”按钮时,我们创建并启动了两个线程,分别用来控制两个方框的运动。线程的创建和启动使用了 threading.Thread 类和 start() 方法。
最后,我们调用了主函数 main() 来运行整个程序,并使用了一个 if __name__ == "__main__" 的条件判断来确保这个脚本可以被其他脚本导入和调用。
阅读全文