Python TK问题
各位好:想写个小程序给小朋友算数学题,基础框架搭好后,被TK中的Entry 卡住。
因为我的需求是 点开后输入算数结果,然后最后对总分。这就需要对Entry 循环生成,并在某个事件后,能挨个读取值形成列表再比对标准答案。
问题的关键:我虽然能循环生产,但是不会挨个读取。有没有什么办法再entry生成的时候 ,单独进行命名,如果能达成我应该剩下可以了。谢谢指导
# 这样读取的都是初始值
for i in range (5):
iii = tk.StringVar()
e_=tk.Entry(main,textvariable = iii )
e_.pack()
answer.append(iii) 1,exec
2,为什么不把它们存到列表里面呢? 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.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.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.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()
wei1987 发表于 2021-2-4 14:46
存excel的已经写好了 ,想搞个直接算的小程序
# TK界面随机产生数学题
不是excel..就是exec
你可以百度下它的用法 qiuyouzhi 发表于 2021-2-4 14:47
不是excel..就是exec
你可以百度下它的用法
虽然没看懂,百度了也不会,但是拿到了启发 。用类似如下很傻的方式应该可以解决
eee=['e1','e2','e3','e4','e5']
for i in range (5):
eee=tk.Entry(main)
eee.pack()
本帖最后由 Daniel_Zhang 于 2021-2-5 13:10 编辑
我觉得你这个吧,用 html css javascript 更容易点{:10_245:}
楼主最后写的那个方法,我觉得可以 for 生成 e1 e2 e3 e4 ... e100 前提是楼主这个能够跑起来
for each in range(1, 101):
e = 'e' + str(each)
eee.append(e)
获得了一个列表,然后就是楼主的 for 循环 range 就是 range(len(eee))
Daniel_Zhang 发表于 2021-2-4 15:23
我觉得你这个吧,用 htnl css javascript 更容易点
楼主最后写的那个方法,我觉得可以 for 生 ...
我就会这一猫,其他的啥都不会 。
现在还在摸索中,还是遇到了验证答案数据比对读取的问题。
是不是一个输入框框架的命名,在一个def 程序()中,下一个def 程序就不认了? wei1987 发表于 2021-2-5 09:54
我就会这一猫,其他的啥都不会 。
现在还在摸索中,还是遇到了验证答案数据比对读取的问题。
是不是一 ...
这里有我之前的一个回答,你看看有没有用
https://fishc.com.cn/forum.php?mod=viewthread&tid=189917
这位老哥自己写了一个自动生成entry 并且带名字的代码
页:
[1]