首先,我对Python3.4.3编程非常陌生,我尝试调用5个入口,并将它们放入数组并显示出来,但我坚持GPA1没有定义,但它是为entry应用程序定义的
import sys
from tkinter import *
def save_data():
fileD.write("GPA1:\n")
fileD.write("%s\n" % GPA1.get())
fileD.write("GPA2:\n")
fileD.write("%s\n" % GPA2.get())
fileD.write("GPA3:\n")
fileD.write("%s\n" % GPA3.get("1.0", END))
app = Tk()
app.title('Student Grade Report')
gpa1=str(GPA1.get())
gp1=float(gpa1)
gpa2=str(GPA2.get())
gp2=float(gpa2)
gpa3=str(GPA3.get())
gp3=float(gpa3)
gpa4=str(GPA4.get())
gp4=float(gpa4)
gpa5=str(GPA5.get())
gp5=float(gpa5)
gpas=gp1+gp2+gp3+gp4+gp5
avg=gpas/5
def DisplayMsg():
DL=str("Dean's list")
AP=str("Academic Probation")
note=("No Message")
if (avg>3.5):
note=DL
else:
if (avg<2.0):
note=AP
return str(note)
classi = StringVar()
classi.set(None)
Label(app, text = "Classification:").pack()
Classification = StringVar()
Classification.set(None)
Radiobutton(app, variable = classi, text = "freshman", value = "freshman").pack()
Radiobutton(app, variable = classi, text = "sophmore", value = "sophmore").pack()
Radiobutton(app, variable = classi, text = "junior", value = "junior").pack()
Radiobutton(app, variable = classi, text = "senior", value = "senior").pack()
Label(app, text = "GPA1:").pack()
GPA1= StringVar()
GPA1.set(None)
GPA1= Entry(app,textvariable=Gpa1).pack()
Label(app, text = "GPA2:").pack()
GPA2= StringVar()
GPA2.set(None)
GPA2 = Entry(app)
Label(app, text = "GPA3:").pack()
GPA3= StringVar()
GPA3.set(None)
GPA3= Entry(app)
Label(app, text = "GPA4:").pack()
GPA4= StringVar()
GPA4.set(None)
GPA4= Entry(app)
Label(app, text = "GPA5:").pack()
GPA5= StringVar()
GPA5.set(None)
GPA5= Entry(app)
Button(app, text= "Message", command = DisplayMsg).pack()
Button(app, text = "Save", command = save_data).pack()
app.mainloop()
您需要修复jcoppens' very thorough answer中描述的所有问题,但您所问的实际问题是另一个需要修复的问题。(我假设你的实际压痕和结构和他在回答中猜测的一样。如果这不适用于您的实际代码……那么,它适用于他的答案中的代码,一旦您解决了所有其他问题,您的代码很可能会很像。)
在
save_data
内,您可以执行以下操作:但是没有名为
GPA1
的全局变量,也没有名为GPA1
的函数内的局部变量。在有一个名为
main
的局部变量,但这并没有帮助;局部变量的全部意义在于它们是唯一存在于一个函数中的局部变量。在您可以通过使
GPA1
全局化来解决这个问题,只需将global GPA1
添加到main
函数的顶部。这是最快的解决办法,但通常不是最好的。在一个更好的解决方案是创建一个
class
,并使GPA1
成为该类的一个属性。无论您使用的是哪个Tkinter文档或教程,都可能有很多很好的例子。在您还可以将}作为回调函数。在
save_data
更改为将GPA1
作为参数,然后使用functools.partial(save_data, GPA1)
而不仅仅是{或者您可以将所有这些函数放入另一个函数中,并使
GPA1
成为nonlocal
变量,而不是global
变量。(我不建议这样做,只是为了完整起见…)当然,无论您做什么,您都需要对
GPA2
执行相同的操作,否则您将在两行之后再次遇到相同的错误。在不用说,不能保证这是程序中的最后一个bug。在
上面发布的程序在缩进方面确实有一些问题,但是我怀疑这是在插入编辑器时发生的。在
另外,我怀疑你的错误是Gpa1未定义,而不是Gpa1。这是因为您将一个文本变量分配给尚未初始化的条目(即它不存在)。在
打包()小部件的方法是使它们垂直显示。如果希望它们出现在类似电子表格的表中,则必须使用.grid()等打包程序,并指定希望小部件出现的列和行。在
下面是代码,稍微清理了一下(注意,我必须使用Tkinter来找到模块,而不是Tkinter):
注意:对不起!我在原来的帖子上加了一个注释,而不是我的答案。这里有一个正确的注释:你还没有完成!还有一些问题需要解决。例如归档.写入如果你不先打开文件,就不起作用了。在
相关问题 更多 >
编程相关推荐