鱼C论坛

 找回密码
 立即注册
查看: 1777|回复: 7

[已解决]Python TK问题

[复制链接]
发表于 2021-2-4 14:36:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位好:
想写个小程序给小朋友算数学题,基础框架搭好后,被TK中的Entry 卡住。
因为我的需求是 点开后输入算数结果,然后最后对总分。这就需要对Entry 循环生成,并在某个事件后,能挨个读取值形成列表再比对标准答案。

问题的关键:我虽然能循环生产,但是不会挨个读取。有没有什么办法再entry生成的时候 ,单独进行命名,如果能达成我应该剩下可以了。谢谢指导

# 这样读取的都是初始值
for i in range (5):

    iii = tk.StringVar()
   
    e_=tk.Entry(main,textvariable = iii )
   
    e_.pack()
   
    answer.append(iii)
最佳答案
2021-2-4 14:47:14
wei1987 发表于 2021-2-4 14:46
存excel的已经写好了 ,想搞个直接算的小程序
# TK界面随机产生数学题

不是excel..就是exec
你可以百度下它的用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 14:37:54 | 显示全部楼层
1,exec
2,为什么不把它们存到列表里面呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 14:46:11 | 显示全部楼层
qiuyouzhi 发表于 2021-2-4 14:37
1,exec
2,为什么不把它们存到列表里面呢?

存excel的已经写好了 ,想搞个直接算的小程序
# TK界面随机产生数学题

import openpyxl
wb= openpyxl.Workbook()
ws=wb.active
import random
import tkinter as tk
from tkinter.filedialog import askdirectory
from openpyxl.styles import Font, Border


def fun():
    s =int(v1.get())
    a =int( v2.get())
    b = int(v3.get())
    route = path.get()
    ws.column_dimensions['A'].width = 30
    ws.column_dimensions['B'].width = 30
    ws.column_dimensions['C'].width = 30
    ws.column_dimensions['D'].width = 30
    qty =1
   
    if vv.get() == 1 :
        
        for i in range (1,int(b/4)+3):
            ws.row_dimensions[i].height = 30
            for j in range (1,5):
                kk = ws.cell(row=i,column=j)
                fonta = Font(name ='Arial',size = 16 )
                kk.font = fonta

                if qty< b+1:
               
                    qty+=1
                    c=int(random.randint(s,a))
                    f=int(random.randint(s,a))
                    jz=random.randint(0,1)
                    if jz>=0.5:
                        test = ("%d.   %d+%d = "%(qty-1,c,f))
                        kk.value=test
                    else:
                        if c>= f:
                            test1 = ("%d.   %d-%d = "%(qty-1,c,f))
                            kk.value=test1

                        else:
                            test1 = ("%d.   %d-%d = "%(qty-1,f,c))
                            kk.value=test1
                else:
                    kk.value=""
                           
            wb.save(r'%s\加减法%d-%d %道.xlsx'% (route,s,a,b))

    if vv.get()==2 :
            for i in range (1,int(b/4)+3):
                ws.row_dimensions[i].height = 30
                for j in range (1,5):
                    kk = ws.cell(row=i,column=j)
                    fonta = Font(name ='Arial',size = 16 )
                    kk.font = fonta

                    if qty < b+1:
                        qty+=1
                        c=int(random.randint(s,a))
                        f=int(random.randint(s,a))
                        test =("%d.   %d × %d = "%(qty-1,c,f))
                        kk.value=test

                    else:
                        kk.value=""
            wb.save(r'%s\乘法%d-%d %d道.xlsx'% (route,s,a,b))
                        
                        
                           
               


    if vv.get() == 3:
        for i in range (1,int(b/4)+3):
            ws.row_dimensions[i].height = 30
            for j in range (1,5):
                kk = ws.cell(row=i,column=j)
                fonta = Font(name ='Arial',size = 16 )
                kk.font = fonta

                if qty < b+1:
                    qty+=1

                    c=int(random.randint(s,a))
                    d = int (random.randint(1,int(a/2)))

                    qq= c//d               
                    aas = c % d
                    if qq >2 :
                        test = ("%d.   %d ÷%d =   "%(qty-1, c-aas+d ,d))

                    else :
                        if c-aas+2*d < a:
                            test = ("%d.   %d ÷%d =   "%(qty-1, c-aas+2*d ,d))
                        else:
                            test = ("%d.   %d ÷%d =   "%(qty-1, c//(d-1)*(d-1) ,d-1))
                    kk.value =test
                else:
                    kk.value = ""
                    

                           

                    
        wb.save(r'%s\整除法%d-%d %d道.xlsx'% (route,s,a,b))

                    
                    

                    
                             
            
               
   

main = tk.Tk()
main.title ("随机出数学题")
main.geometry("600x500")

def routing():
    path_ = askdirectory()
    path.set(path_)

group = tk.LabelFrame (main ,text ='选择出题类型',padx =5 ,pady =5)
group.pack(padx =20 ,pady =20)

vv= tk.IntVar()
r1 = tk.Radiobutton(group, text="加减法", variable=vv, value=1).pack(anchor="w")
r2 = tk.Radiobutton(group, text="乘法", variable=vv, value=2).pack(anchor="w")
r3 = tk.Radiobutton(group, text="整除法", variable=vv, value=3).pack(anchor="w")

path = tk.StringVar()

v1 = tk.StringVar()
g2 = tk.LabelFrame (main ,text ='选择最小值' ,padx =5 ,pady =5)
g2.pack(padx =10 ,pady =10)
e1 = tk.Entry(g2,textvariable=v1).pack(anchor="w")

v2 = tk.StringVar()
g3 = tk.LabelFrame (main ,text ='选择最大值' ,padx =5 ,pady =5)
g3.pack(padx =10 ,pady =10)
e2 = tk.Entry(g3,textvariable=v2).pack(anchor="e")

v3 = tk.StringVar()
g4 =tk.LabelFrame (main ,text ='出题数量' ,padx =5 ,pady =5)
g4.pack(padx =10 ,pady =10)
e3 = tk.Entry(g4,textvariable=v3).pack(anchor="w")


g5 =tk.LabelFrame (main ,text ='保存路径' ,padx =5 ,pady =5)
g5.pack(padx =10 ,pady =10)
e4 = tk.Entry(g5,textvariable = path).pack(anchor="w")
com1 =tk.Button( g5 ,text ='路径选择',command = routing)
com1.pack()


com2 =tk.Button( main ,text ='出题',width=10,command = fun)
com2.pack()

main.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 14:47:14 | 显示全部楼层    本楼为最佳答案   
wei1987 发表于 2021-2-4 14:46
存excel的已经写好了 ,想搞个直接算的小程序
# TK界面随机产生数学题

不是excel..就是exec
你可以百度下它的用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-4 15:10:22 | 显示全部楼层
qiuyouzhi 发表于 2021-2-4 14:47
不是excel..就是exec
你可以百度下它的用法

虽然没看懂,百度了也不会,但是拿到了启发 。用类似如下很傻的方式应该可以解决
eee=['e1','e2','e3','e4','e5']
for i in range (5):


    eee[i]=tk.Entry(main)
   
    eee[i].pack()
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-4 15:23:35 | 显示全部楼层
本帖最后由 Daniel_Zhang 于 2021-2-5 13:10 编辑

我觉得你这个吧,用 html css javascript 更容易点

楼主最后写的那个方法,我觉得可以 for 生成 e1 e2 e3 e4 ... e100 前提是楼主这个能够跑起来

for each in range(1, 101):
    e = 'e' + str(each)
    eee.append(e)

获得了一个列表,然后就是楼主的 for 循环 range 就是 range(len(eee))

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-5 09:54:03 | 显示全部楼层
Daniel_Zhang 发表于 2021-2-4 15:23
我觉得你这个吧,用 htnl css javascript 更容易点

楼主最后写的那个方法,我觉得可以 for 生 ...

我就会这一猫,其他的啥都不会 。
现在还在摸索中,还是遇到了验证答案数据比对读取的问题。
是不是一个输入框框架的命名,在一个def 程序()中,下一个def 程序就不认了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-5 13:13:07 | 显示全部楼层
wei1987 发表于 2021-2-5 09:54
我就会这一猫,其他的啥都不会 。
现在还在摸索中,还是遇到了验证答案数据比对读取的问题。
是不是一 ...

这里有我之前的一个回答,你看看有没有用

https://fishc.com.cn/forum.php?mod=viewthread&tid=189917

这位老哥自己写了一个自动生成entry 并且带名字的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 13:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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