第十一周

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号