吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1414|回复: 38
收起左侧

[学习记录] 小学一年级 100以内加减

  [复制链接]
dahai1983 发表于 2024-8-7 17:18
本帖最后由 dahai1983 于 2024-8-12 17:06 编辑

写个小学加减法计算生成,先记录一下,有时间再完善封装
第一次用tk,做界面


import random
from tkinter.filedialog import askopenfilename
from tkinter.constants import BOTH, END
from tkinter import  ttk

import xlsxwriter
import tkinter as tk
from pathlib import Path



class Win(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry("430x300+350+250")
        self.title('小学生数学题生成器')
        label = tk.Label(self, text="运算符号:")
        label.place(x=0, y=12)
        self.var_add = tk.IntVar(value=1)
        self.var_sub = tk.IntVar(value=1)
        self.var_mul = tk.IntVar()
        self.var_div = tk.IntVar()
        self.checkbox_add = tk.Checkbutton(self, text="加法", variable=self.var_add)
        self.checkbox_sub = tk.Checkbutton(self, text="减法", variable=self.var_sub)
        self.checkbox_mul = tk.Checkbutton(self, text="乘法", variable=self.var_mul)
        self.checkbox_div = tk.Checkbutton(self, text="除法", variable=self.var_div)
        self.checkbox_add.place(x=60, y=10)
        self.checkbox_sub.place(x=120, y=10)
        self.checkbox_mul.place(x=180, y=10)
        self.checkbox_div.place(x=240, y=10)
        label2 = tk.Label(self, text="数字范围:")
        label2.place(x=0, y=32)
        label3 = tk.Label(self, text="——")
        label3.place(x=86, y=31)
        self.entry_min = tk.Entry(self, width=5)
        self.entry_min.insert(0, '0')
        self.entry_max = tk.Entry(self, width=5)
        self.entry_max.insert(0, '100')
        self.entry_min.place(x=60, y=32)
        self.entry_max.place(x=120, y=32)
        label4 = tk.Label(self, text="出题数量:")
        label4.place(x=0, y=55)
        self.entry_sum = tk.Entry(self, width=5)
        self.entry_sum.insert(0, '30')
        self.entry_sum.place(x=60, y=55)
        btn = tk.Button(self, text="开始出题", command=self.showtable)
        btn_out = tk.Button(self, text="保存到文件", command=self.outexcel)
        btn.place(x=320, y=10)
        btn_out.place(x=320, y=40)

        label4 = tk.Label(self, text="输出目录:")
        label4.place(x=0, y=80)
        path = Path(__file__).parent.resolve()
        self.entry_path = tk.Entry(self, width=35)
        self.entry_path.insert(0, str(path) + '\out.xls')
        self.entry_path.place(x=60, y=80)
        btn_path = tk.Button(self, text="重选目录", command=self.chanpath)
        btn_path.place(x=320, y=75)

    def chanpath(self):
        self.entry_path.delete(0, 'end')
        file = tk.filedialog.asksaveasfilename()
        self.entry_path.insert(0, file)
        pass

    def outexcel(self):
        xls = xlsxwriter.Workbook(self.entry_path.get())
        bold = xls.add_format({'bold': 0, "color": "black", "font_size": 15})
        worksheet = xls.add_worksheet('Sheet1')
        for i in range(len(self.lst_out)):
            worksheet.write_string('A' + str(i+1), self.lst_out, bold)
        xls.close()
        pass

    def generate_arithmetic(self, var, min_max):
        list = []
        if var[0] == 1:
            list.append('+')
        if var[1] == 1:
            list.append('-')
        if var[2] == 1:
            list.append('x')
        if var[3] == 1:
            list.append('÷')
        op = random.choice(list)
        num1 = random.randint(int(min_max[0]), int(min_max[1]))
        num2 = random.randint(int(min_max[0]), int(min_max[1]))
        question = f"{num1} {op} {num2} ="
        return question

    def getvar(self):
        var = (self.var_add.get(), self.var_sub.get(), self.var_mul.get(), self.var_div.get())
        range = (self.entry_min.get(), self.entry_max.get())
        return var, self.entry_sum.get(), range
        pass

    def showtable(self):
        var, sum, min_max = self.getvar()
        self.lst_out = []
        for i in range(int(sum)):
            ques = self.generate_arithmetic(var, min_max)
            self.lst_out.append(ques)
        pass

        scrollbar_y = tk.Scrollbar(self, orient="vertical")
        treeview = ttk.Treeview(self, columns=("Column 1", "Column 2", "Column 3", "Column 4"), show="headings",
                                   yscrollcommand=scrollbar_y.set)
        scrollbar_y.config(command=treeview.yview)
        treeview.column("Column 1", width=60)
        treeview.column("Column 2", width=60)
        treeview.column("Column 3", width=60)
        treeview.column("Column 4", width=60)
        for item in self.lst_out:
            treeview.insert('', END, values=item)

        treeview.place(x=10, y=120)
        scrollbar_y.pack(side="right", fill="y")

    pass



def main():
    win = Win()
    win.mainloop()


if __name__ == '__main__':
    main()


免费评分

参与人数 6吾爱币 +4 热心值 +5 收起 理由
玅尛涵 + 1 + 1 热心回复!
akikosea + 1 热心回复!
qiaoyong + 1 + 1 热心回复!
lfm333 + 1 + 1 谢谢@Thanks!
5636942 + 1 非常不错不错
jyz20010903 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kangta520 发表于 2024-8-7 19:34
试用下,谢谢分享
diaoyututu 发表于 2024-8-7 20:29
jiangwen1 发表于 2024-8-7 20:36
zoukekai 发表于 2024-8-7 20:50
这可以,谢谢楼主。
sdcssdl 发表于 2024-8-7 21:05
谢谢楼主,正需要
37893202812 发表于 2024-8-7 21:39
感谢楼主
takajihan 发表于 2024-8-7 21:48
谢谢楼主。
great_h 发表于 2024-8-7 22:16
生成了好多结果大于100的题并且写入到表格里了
falsely 发表于 2024-8-7 22:18
楼主加油
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-11 16:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表