python canvas绘制圆形
时间: 2023-07-17 20:01:02 浏览: 106
在Python中,你可以使用`tkinter`库的`create_oval`方法来绘制圆形。以下是一个简单的示例:
```python
from tkinter import *
# 创建窗口
window = Tk()
# 创建Canvas对象
canvas = Canvas(window, width=400, height=400)
canvas.pack()
# 绘制圆形
canvas.create_oval(50, 50, 150, 150, fill='red')
# 运行窗口主循环
window.mainloop()
```
这个示例创建了一个窗口,并在窗口中绘制了一个红色的圆形。`create_oval`方法接受四个参数,分别是圆形的左上角和右下角的坐标。你可以根据需要调整这些坐标来绘制不同大小和位置的圆形。
相关问题
python canvas画球
Python中的canvas是一个图形库,可以用来绘制各种形状,包括圆形。在canvas中,可以使用create_oval()方法来绘制圆形,该方法需要提供圆形的左上角和右下角坐标。同时,可以使用move()方法来移动圆形的位置。因此,可以通过不断地移动圆形的位置来实现小球满屏乱跑的效果。
下面是一个简单的示例代码,实现了在canvas上画一个小球并让它满屏乱跑的效果:
```
import tkinter as tk
import random
# 创建窗口和canvas
root = tk.Tk()
canvas = tk.Canvas(root, width=500, height=500)
canvas.pack()
# 画一个小球
ball = canvas.create_oval(0, 0, 20, 20, fill='red')
# 随机生成小球的初始位置和速度
x = random.randint(0, 480)
y = random.randint(0, 480)
vx = random.randint(-5, 5)
vy = random.randint(-5, 5)
# 移动小球的函数
def move_ball():
global x, y, vx, vy
# 移动小球
canvas.move(ball, vx, vy)
x, y = canvas.coords(ball)[:2]
# 碰到边缘反弹
if x < 0 or x > 480:
vx = -vx
if y < 0 or y > 480:
vy = -vy
# 重复调用move_ball函数
canvas.after(50, move_ball)
# 调用move_ball函数开始移动小球
move_ball()
# 进入消息循环
root.mainloop()
```
用python canvas制作一个动态钟表,附上代码
好的,以下是使用Python的tkinter模块和canvas组件制作动态钟表的代码:
```
import tkinter as tk
import time
class Clock:
def __init__(self, canvas, x, y, radius):
self.canvas = canvas
self.x = x
self.y = y
self.radius = radius
self.hour_hand = None
self.minute_hand = None
self.second_hand = None
def draw_clock_face(self):
self.canvas.create_oval(self.x - self.radius, self.y - self.radius, self.x + self.radius, self.y + self.radius, width=2)
def draw_hour_marks(self):
for i in range(12):
x1 = self.x + (self.radius - 10) * math.cos(math.pi / 6 * i - math.pi / 2)
y1 = self.y + (self.radius - 10) * math.sin(math.pi / 6 * i - math.pi / 2)
x2 = self.x + (self.radius - 20) * math.cos(math.pi / 6 * i - math.pi / 2)
y2 = self.y + (self.radius - 20) * math.sin(math.pi / 6 * i - math.pi / 2)
self.canvas.create_line(x1, y1, x2, y2, width=2)
def draw_hour_hand(self, hour):
length = self.radius * 0.5
angle = math.pi / 6 * (hour % 12) - math.pi / 2
x = self.x + length * math.cos(angle)
y = self.y + length * math.sin(angle)
if self.hour_hand:
self.canvas.coords(self.hour_hand, self.x, self.y, x, y)
else:
self.hour_hand = self.canvas.create_line(self.x, self.y, x, y, width=4)
def draw_minute_hand(self, minute):
length = self.radius * 0.8
angle = math.pi / 30 * minute - math.pi / 2
x = self.x + length * math.cos(angle)
y = self.y + length * math.sin(angle)
if self.minute_hand:
self.canvas.coords(self.minute_hand, self.x, self.y, x, y)
else:
self.minute_hand = self.canvas.create_line(self.x, self.y, x, y, width=2)
def draw_second_hand(self, second):
length = self.radius * 0.9
angle = math.pi / 30 * second - math.pi / 2
x = self.x + length * math.cos(angle)
y = self.y + length * math.sin(angle)
if self.second_hand:
self.canvas.coords(self.second_hand, self.x, self.y, x, y)
else:
self.second_hand = self.canvas.create_line(self.x, self.y, x, y, fill="red", width=1)
def update_clock(clock):
now = time.localtime()
hour = now.tm_hour
minute = now.tm_min
second = now.tm_sec
clock.draw_hour_hand(hour + minute / 60)
clock.draw_minute_hand(minute)
clock.draw_second_hand(second)
clock.canvas.after(1000, update_clock, clock)
def main():
root = tk.Tk()
root.title("Clock")
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()
clock = Clock(canvas, 200, 200, 150)
clock.draw_clock_face()
clock.draw_hour_marks()
update_clock(clock)
root.mainloop()
if __name__ == "__main__":
main()
```
在这个程序中,`Clock`类表示时钟,包括钟表的位置、半径和时针、分针、秒针的状态。`draw_clock_face()`方法用于绘制钟表的圆形,`draw_hour_marks()`方法用于绘制小时刻度线,`draw_hour_hand()`、`draw_minute_hand()`、`draw_second_hand()`方法分别用于绘制时针、分针、秒针。`update_clock()`函数用于更新时钟的状态,每隔一秒钟调用一次。在`main()`函数中,创建主窗口和画布,创建时钟对象并绘制时钟,调用`update_clock()`函数更新时钟的状态。
阅读全文