加法算术小程序,再改进

1、适应小孩子爱捣蛋的特点,所有输入正确答案之外的输入,界面上不会再有变化。

2、输入正确答案后会随机出现奥特曼图片,吸引小孩子继续“玩”。

3、加入随机功能后,原来正常显示的图片,会出现白屏的情况,加入一行

import tkinter as tk
from tkinter import ttk
import random
import datetime as dt
import os


def main():
    YMDHM = dt.datetime.now().strftime("%Y-%m-%d-%H-%M")
    path = os.getcwd()
    print(path)
    path1 = path.replace("\\", "/")
    print(path1)
    
    window = tk.Tk()
    
    a = window.winfo_screenwidth()  #1920
    b = window.winfo_screenheight() #1080
    print(a, b)

    window.geometry("%dx%d"%(a,b))
    

    path_ultraman= path1 +"/奥特曼图片"               
    pt_ultraman_list = os.listdir(path_ultraman)
    print(len(pt_ultraman_list))

    k = random.randint(0,len(pt_ultraman_list))
    print(k)
    
    
    pt2= tk.PhotoImage(file = path_ultraman +"/"+ pt_ultraman_list[k])

    init_time = dt.datetime.now()
    start_time = dt.datetime.now()
    end_time = dt.datetime.now()
    
    m=0 #正确次数
    n=0 #总次数
    
        
    x = random.randint(1, 10)
    y = random.randint(1, 10)
    calc = "%d + %d" %(x, y)

    
    ultraman_frame = tk.Frame(window)
    ultraman_frame.grid(row=0, column=0)
    lll = tk.Label(ultraman_frame, fg="red", text=pt_ultraman_list[k], font="黑体 15", justify="left", anchor="nw")
    lll.grid(row=0, column=0, padx=5, pady=5, sticky="nw")
    
    ll = tk.Label(ultraman_frame, image=pt2, compound="left", font="黑体 15")
    ll.grid(row=1, column=0, padx=5, pady=5, sticky="nw")

    calc_frame = tk.Frame(window)
    calc_frame.grid(row=0, column=1)
    

    fm2 = tk.Frame(calc_frame)
    fm2.pack(anchor="nw", side="top", fill="both", padx=5, pady=5)
    #l = tk.Label(window, text=calc, fg="red", bg="white", font = "黑体 100", image=pt2, compound="center")
    l = tk.Label(fm2, text=calc, fg="red", font = "黑体 200")
    l.grid(row=0, column=0, columnspan=2, padx=5, pady=5)
    

    pic1 = "☯☯☯☯☯☯☯☯☯☯"
    pic2 = "✸✸✸✸✸✸✸✸✸✸"

    pic3 = pic1[0:x]
    pic4 = pic2[0:y]
    
    pic_lb1 = tk.Label(fm2, text=pic3, font = "宋体 45", justify="left", bg="light blue", wraplength=300, height=2, width=int(15*a/1440))
    pic_lb1.grid(row=1, column=0, padx=5, pady=5)

    pic_lb2 = tk.Label(fm2, text=pic4, font = "宋体 45", justify="left", bg="pink",wraplength=300, height=2, width=int(15*a/1440))
    pic_lb2.grid(row=1, column=1, padx=5, pady=5)


    

    fm1 = tk.Frame(calc_frame)
    fm1.pack(anchor="nw", side="top", fill="both", padx=5, pady=5)
    lb1 = tk.Label(fm1, text="正确率:",font="宋体 14")
    lb1.grid(row=0, column=0, padx=5, pady=5)
    pb1 = ttk.Progressbar(fm1)  #正确率
    pb1.grid(row=0, column=1, ipadx=a/10, padx=5, pady=5)
    lb2 = tk.Label(fm1, text="",font="宋体 14")
    lb2.grid(row=0, column=2, padx=5, pady=5)

    lb3 = tk.Label(fm1, text="平均用时:",font="宋体 14")
    lb3.grid(row=1, column=0, padx=5, pady=5)
    pb2 = ttk.Progressbar(fm1)  #平均用时
    pb2.grid(row=1, column=1, ipadx=a/10, padx=5, pady=5)
    lb4 = tk.Label(fm1, text="",font="宋体 14")
    lb4.grid(row=1, column=2, padx=5, pady=5)

    
    l2 = tk.Label(calc_frame, bg="light blue", fg = "red", font = "宋体 14", height=1)
    l2.pack(anchor="nw", side="top",fill="x", padx=5, pady=5)


       
    e = tk.Entry(calc_frame, font="黑体 50", fg="red", bg="yellow")
    e.pack(anchor="center", side="top", padx=5, pady=5, ipadx=10, ipady=10)

    pb1["maximum"] = 1
    pb1["value"] = 0
    pb2["maximum"] = 30
    
    with open(path +"/"+YMDHM+ "做题记录.csv", "a+") as f:
                    f.write("题目,答案,对错,用时(秒)"+"\n")

    def submit_result():
        nonlocal x
        nonlocal y
        nonlocal calc
        nonlocal start_time
        nonlocal end_time
        nonlocal init_time
        nonlocal m
        nonlocal n
        nonlocal path
        
        
        inp = e.get()
        print(e.get())
        
        
        
        try:
            if int(inp) == x+y:
                n = n+1            
                
                end_time = dt.datetime.now()
                time_used = end_time - start_time                
                avg_time = (end_time - init_time)/n
                
                        
                m = m+1            
                l2.config(text = "正确!!", fg="red")

                path_ultraman= path1 +"/奥特曼图片"               
                pt_ultraman_list = os.listdir(path_ultraman)
                print(len(pt_ultraman_list))
                

                i = random.randint(0,len(pt_ultraman_list))
                print("i:", i)
                print(pt_ultraman_list[i])
                print(path_ultraman)
                pt1= tk.PhotoImage(file = path_ultraman +"/"+ pt_ultraman_list[i])
                print(pt1)
                               
                ll.config(image = pt1, compound="center")
                ll.image = pt1
                lll.config(text=pt_ultraman_list[i])
                
                
                pb1["value"] = m/n
                pb2["value"] = 30 - avg_time.seconds
                lb2.config(text="正确数%d,总题数%d。" %(m,n))
                lb4.config(text="%d秒,本次用时%s秒。"%(avg_time.seconds,str(time_used.seconds)))
                
                print("正确!!")
                with open(path +"/"+YMDHM+ "做题记录.csv", "a+") as f:                    
                    f.write("%d + %d"%(x, y)+ "," +str(inp) + ",正确," + str(time_used.seconds) + "\n")
                    
                e.delete(0, tk.END)

                start_time = dt.datetime.now()
                x = random.randint(1, 10)
                y = random.randint(1, 10)
                calc = "%d + %d" %(x, y)
                l.config(text=calc)

                pic3 = pic1[0:x]
                pic4 = pic2[0:y]
                pic_lb1.config(text=pic3)
                pic_lb2.config(text=pic4)
                
                print(x, y)
                
            
            else:
                n = n+1
                e.delete(0, tk.END)
                with open(path +"/"+YMDHM+ "做题记录.csv", "a+") as f:                    
                    f.write("%d + %d"%(x, y) + "," +str(inp) + ",错误"+ "\n")
                #pass
        
        except:
            e.delete(0, tk.END)
            pass
        
            
        
        

    def submit_result_enter(ev=None):
        submit_result()

    e.bind("<Return>", submit_result_enter)        
            

    b = ttk.Button(calc_frame, text="提交", command = submit_result)
    b.pack(anchor="center", side="top", padx=5, pady=5)

    window.mainloop()

main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值