1.每日总结12.每日总结23.每日总结34.每日总结45.每日总结56.每日总结67.每日总结78.每日总结89.每日总结910.每日总结1011.每日总结1112.每日总结1213.每日总结1314.每日总结1415.每日总结1516.每日总结1617.每日总结1718.每日总结1819.每日总结1920.每日总结2021.每日总结2122.每日总结2223.每日总结2324.每日总结2425.每日总结2526.每日总结2627.每日总结2728.每日总结2829.每日总结2930.每日总结3031.每日总结3232.每日总结3133.每日总结3334.每日总结3435.每日总结3536.每日总结41
37.每日总结42
38.每日总结4439.每日总结4640.每日总结4741.构建之法读后感0242.构建之法读后感0343.梦断代码读后感0144.梦断代码读后感0245.梦断代码读后感0346.构建之法读后感0147.每日总结3948.每日总结4049.每日总结4550.每日总结4851.每日总结4952.每日总结5053.每日总结5154.每日总结5255.每日总结5356.每日总结5457.每日总结5558.每日总结5659.每日总结5760.每日总结5861.每日总结6062.每日总结6163.每日总结64(事后诸葛亮会议)64.每日总结63(关于课程个人总结)65.第一阶段冲刺个人分工66.每日总结62今天继续致力于可视化的研究
在编译器中完成了人物自画像和算盘算珠的图片显示
并弄清了算盘算珠的运算方式计算方法
from tkinter import * def initWindow(): rect = canvas.create_rectangle(25, 40, 450, 400, width=3) # 算盘边框 x0, y0, x1, y1 = 0, 0, 0, 0 for i in range(5): # 生成串算珠的线 line_shu = canvas.create_line(70 + x0, 40 + y0, 70 + x1, 400 + y1, width=3) x0 += 80 x1 += 80 line_fenge = canvas.create_line(25, 100, 450, 100, width=3) # 生成上下珠的分割线 x0, y0, x1, y1 = 0, 0, 0, 0 for i in range(5): # 生成5个上珠 top_oval[i] = canvas.create_oval(40 + x0, 60 + y0, 100 + x1, 90 + y1, fill='orange', tags=f"top{i}") x0 += 80 x1 += 80 x0, y0, x1, y1 = 0, 0, 0, 0 for i in range(4): # 生成4*5个下珠 for j in range(5): below_oval[i][j] = canvas.create_oval(40 + x0, 160 + y0, 100 + x1, 190 + y1, fill='yellow', tags=f"below{i}{j}") chushi[i][j] = canvas.coords(below_oval[i][j]) x0 += 80 x1 += 80 x0 = 0 x1 = 0 y0 += 60 y1 += 60 print(chushi) num = [[0 for i in range(5)] for j in range(4)] # 五个下珠分别对应的数值 num2 = [0 for i in range(5)] # 五个上珠分别对应的数值 canvas.create_oval(750, 370, 470, 90, fill='yellow') canvas.create_oval(500, 170, 560, 200, fill='black') canvas.create_oval(650, 170, 710, 200, fill='black') canvas.create_arc(500, 200, 700, 300, start=-150, extent=120, style=ARC, width=3) def get_empty(): empty = [[0 for j in range(5)] for i in range(4)] for i in range(4): for j in range(5): if canvas.coords(below_oval[i][j]) != chushi[i][j]: empty[i][j] = 1 print(empty) return empty def bind(): def handler_adaptor(handler, fun, row, col): """事件处理函数的适配器,相当于中介,可以帮助tag_bind函数传递参数""" return lambda event, handler=handler, fun=fun, col=col, row=row: handler(event=event, fun=fun, row=row, col=col) def handler_adaptor2(handler2, fun, row): """事件处理函数的适配器,相当于中介,可以帮助tag_bind函数传递参数""" return lambda event, handler2=handler2, fun=fun, row=row: handler2(event=event, fun=fun, row=row) def handler(event, fun, row, col): """下珠上划""" content = fun # 这个就是被点击的算珠id empty = get_empty() if row == 0: if float(canvas.coords(content)[1]) - 40 >= 100: canvas.move(content, 0, -40) else: if empty[row - 1][col] == 1: if float(canvas.coords(content)[1]) - 40 >= 110 + 10 * (row + 1): canvas.move(content, 0, -40) def handler2(event, fun, row): """上珠上划""" content = fun # 这个就是被点击的算珠id if float(canvas.coords(content)[1]) - 20 >= 40: canvas.move(content, 0, -20) def handler3(event, fun, row, col): """下珠下划""" content = fun # 这个就是被点击的算珠id empty = get_empty() if row == 3: if float(canvas.coords(content)[1]) + 40 <= 350: canvas.move(content, 0, 40) else: if empty[row][col] == 1: canvas.move(content, 0, 40) def handler4(event, fun, row): """上珠下划""" content = fun # 这个就是被点击的算珠id if float(canvas.coords(content)[1]) + 20 <= 60: canvas.move(content, 0, 20) for i in range(5): canvas.tag_bind(top_oval[i], "<Button-1>", handler_adaptor2(handler2, fun=top_oval[i], row=i)) canvas.tag_bind(top_oval[i], "<Button-3>", handler_adaptor2(handler4, fun=top_oval[i], row=i)) for i in range(4): for j in range(5): canvas.tag_bind(below_oval[i][j], "<Button-1>", handler_adaptor(handler, fun=below_oval[i][j], row=i, col=j)) canvas.tag_bind(below_oval[i][j], "<Button-3>", handler_adaptor(handler3, fun=below_oval[i][j], row=i, col=j)) if _name_ == "_main_": window = Tk() window.title("电子算盘") window.geometry("800x500") canvas = Canvas(window, width="800", height="500", bg="white") canvas.pack() top_oval = [int for i in range(5)] # 定义列表存储5个上珠 below_oval = [[int for i in range(5)] for i in range(4)] # 定义列表存储4*5个下珠 chushi = [[0 for j in range(5)] for i in range(4)] # 所有下珠的初始坐标 initWindow() bind() window.mainloop()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)