首页 > 其他分享 >5.29

5.29

时间:2024-06-11 09:22:13浏览次数:8  
标签:canvas content oval range fun 5.29 row

完成python作业

 

8-1 【Python0021】电子算盘 分数 10

【题目描述】设计一个电子算盘。要求绘制电子算盘界面,设计并实现打珠算过程(界面参考如下图示)。

界面右侧要求以图形绘制的方式绘制自画像,注意不能是图像文件显示的形式。

【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

 

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):  

       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):

       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):

       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):

       return lambda event, handler2=handler2, fun=fun, row=row: handler2(event=event, fun=fun, row=row)

   def handler(event, fun, row, col):

       content = fun      

       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      

       if float(canvas.coords(content)[1]) - 20 >= 40:

           canvas.move(content, 0, -20)

   def handler3(event, fun, row, col):

       """下珠下划"""

       content = fun      

       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      

       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()

标签:canvas,content,oval,range,fun,5.29,row
From: https://www.cnblogs.com/zljzy/p/18241508

相关文章

  • 5.29
    省电,就意味着省钱。黄仁勋在现场展示了他的CEO数学:“买得越多,省得越多”。英伟达通过GPU+CPU组合,实现了高达100倍的加速,同时功耗仅增加到3倍,成本仅增加到1.5倍。老黄建议企业同时投资图形处理器(GPU)和中央处理器(CPU)。这两种处理器可以协同工作,将任务完成时间从“......
  • CV每日论文--2024.5.29
    1、GaussianFormer:SceneasGaussiansforVision-Based3DSemanticOccupancyPrediction中文标题:GaussianFormer:将场景作为高斯分布进行基于视觉的3D语义占有率预测简介:3D语义占空比预测是自动驾驶等视觉系统中一个重要的任务,目的是获取周围场景的3D几何和语义信......
  • 5.29
    做完了安卓端的政策查询系统页面跳转时数据传递这儿想到一个不一样的方法页面跳转的主函数这儿初始化viewModel避免了每次使用viewModel的初始化,将他作为一个参数传递给各个页面@ComposablefunAppNavHost(rootNavController:NavHostController=rememberNavContr......
  • JAVA每日作业day5.29
    依旧是活力满满的一天奥老铁们。今天学习了数组,数组包括了以下方面:1.动态初始化:自己定义数组的长度,系统决定初始值。2.静态初始化:自己决定数组的初始值,系统决定长度。3.数组的的索引:索引从0开始并逐一增加(每次加1),我们要存储数组的数据时,要用索引来存储,话不多说上代码。......
  • 5.29
    完成工程数学任务python实验四【Python0027】函数图形绘制【题目描述】设,,,其中,完成下列操作:(1)在同一坐标系下用不同的颜色和线型绘制y1、y2和y3三条曲线;(2)在同一绘图框内以子图形式绘制y1、y2和y3三条曲线。【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的......
  • 5.29_Java程序流程控制
    CSDN   同C语言的流程同1、补充:1、switch使用时的注意事项1、表达式只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、longswitch里面是做分支匹配,也就是可以出现很多分支,如果弄得范围很大,不可能出现这么多分支,int的范围都很......
  • 5.29 matlab
    %定义目标函数f=@(x)(x(1)+10*2)^2+5*(x(3)-x(4))^2+(x(2)-2*x(3))^4+10*(x(1)-x(4))^4;%初始值和终止准则x0_list=[-2,2,-3,3;-3,-1.5,0.5,-1.5];%确保每个初始点有四个元素tol=1e-5;%梯度和海森矩阵函数(这里仅为示例,需要您根据实际情......
  • NVIDIA显卡驱动NVIDIA-Linux-x86_64-545.29.02 安装错误分析之一
    software/NVIDIA-Linux-x86_64-545.29.02/kernel-open/nvidia/libspdm_shash.c:在函数‘lkca_hmac_duplicate’中:/software/NVIDIA-Linux-x86_64-545.29.02/kernel-open/nvidia/libspdm_shash.c:90:26:错误:implicitdeclarationoffunction‘crypto_tfm_ctx_aligned’;didy......
  • 5.29测试
    课上进行了学生成绩管理系统的制作。实现功能如下:1,实现了分角色登录以及密码加密保护。2,可以查询学生和教师以及课程的相关信息。3,可以对相关信息进行增删改查。4,成功连接数据库。未实现:1,角色功能混乱。2,无法在前端进行用户信息的修改。......
  • 5.29
    今日对昨天考试的功能又增加了一些,完成了在考试的时候没有完成的功能:代码如下:Dao.javapackagedao;importUtil.DBUtil;importbean.Sbean;importbean.Tbean;importjava.sql.*;importjava.util.ArrayList;importjava.util.List;publicclassDao{p......