第十一周

python作业
算盘
`import tkinter as tk
class ElectronicAbacus:
def init(self, root):
self.root = root
self.root.title("电子算盘")
# 用于存储算珠的状态
self.upper_states = [False] * 5 # 上横梁的算珠状态
self.lower_states = [False] * 10 # 下横梁的算珠状态
# 创建一个 Canvas 用于绘制算盘界面
self.canvas = tk.Canvas(root, width=800, height=500, bg="#f0f0f0")
self.canvas.pack()
# 绘制算盘框架
self.canvas.create_rectangle(50, 50, 350, 350, outline="black", width=3)
# 绘制算盘横梁
self.canvas.create_line(50, 200, 350, 200, fill="black", width=3)
# 绘制上横梁的算珠
self.upper_pearls = []
for i in range(5):
x = 80 + i * 60
y = 175 # 初始位置在横梁下方
pearl = self.canvas.create_oval(x - 20, y - 20, x + 20, y + 20, fill="#FF7F00", tags=f"upper_pearl_{i}")
self.upper_pearls.append(pearl)
# 绘制下横梁的算珠
self.lower_pearls = []
for i in range(10):
x = 80 + i * 28
y = 225 # 初始位置在横梁上方
pearl = self.canvas.create_oval(x - 15, y - 15, x + 15, y + 15, fill="#FFFF00", tags=f"lower_pearl_{i}")
self.lower_pearls.append(pearl)
# 绘制右侧的自画像
self.draw_self_portrait()
# 为算珠绑定点击事件
for i in range(5):
self.canvas.tag_bind(f"upper_pearl_{i}", "<Button-1>", lambda event, i=i: self.click_upper_pearl(i))
for i in range(10):
self.canvas.tag_bind(f"lower_pearl_{i}", "<Button-1>", lambda event, i=i: self.click_lower_pearl(i))
# 显示当前数值
self.value_label = self.canvas.create_text(400, 50, text="当前数值: 0", font=("Arial", 16))
def draw_self_portrait(self):
# 绘制自画像
self.canvas.create_oval(430, 100, 650, 250, outline="black", width=2)
self.canvas.create_oval(410, 80, 670, 180, outline="black", width=2, fill="#8B4513")
self.canvas.create_line(460, 140, 480, 145, width=2)
self.canvas.create_line(550, 140, 570, 145, width=2)
self.canvas.create_oval(460, 150, 480, 170, outline="black", width=1)
self.canvas.create_oval(550, 150, 570, 170, outline="black", width=1)
self.canvas.create_line(510, 170, 510, 190, width=1)
self.canvas.create_arc(470, 200, 550, 230, start=0, extent=-180, outline="black", width=1)
self.canvas.create_oval(435, 160, 455, 190, outline="black", width=1)
self.canvas.create_oval(625, 160, 645, 190, outline="black", width=1)
def click_upper_pearl(self, index):
# 切换上横梁算珠的状态并更新位置
self.upper_states[index] = not self.upper_states[index]
self.update_pearl_position()
def click_lower_pearl(self, index):
# 切换下横梁算珠的状态并更新位置
self.lower_states[index] = not self.lower_states[index]
self.update_pearl_position()
def update_pearl_position(self):
# 更新上横梁算珠的位置
for i in range(5):
x = 80 + i * 60
y = 125 if self.upper_states[i] else 175
self.canvas.coords(self.upper_pearls[i], x - 20, y - 20, x + 20, y + 20)
# 更新下横梁算珠的位置
for i in range(10):
x = 80 + i * 28
y = 225 if self.lower_states[i] else 275
self.canvas.coords(self.lower_pearls[i], x - 15, y - 15, x + 15, y + 15)
# 更新当前数值显示
self.update_value()
def update_value(self):
value = 0
# 计算上横梁算珠的值
for i in range(5):
if self.upper_states[i]:
value += 5
# 计算下横梁算珠的值
for i in range(10):
if self.lower_states[i]:
value += 1
# 更新显示的数值
self.canvas.itemconfig(self.value_label, text=f"当前数值: {value}")
if name == "main":
root = tk.Tk()
app = ElectronicAbacus(root)
root.mainloop()
`
浙公网安备 33010602011771号