Python Tkinter var.get()赢得';提取主根时,无法获取值
我在从单选按钮中获取值时遇到问题,因为我提取了主根并调用了它上面的新根。当我销毁主根目录时,它正在工作,但由于我以后需要再次使用该根目录,所以无法销毁它 代码当前不起作用,因为我无法获取值以继续使用它。 如果你需要这个简单的版本,你可以问我,我会添加它而不是这个 提取元素周期表以打开新窗口开始测验Python Tkinter var.get()赢得';提取主根时,无法获取值,python,tkinter,tk,Python,Tkinter,Tk,我在从单选按钮中获取值时遇到问题,因为我提取了主根并调用了它上面的新根。当我销毁主根目录时,它正在工作,但由于我以后需要再次使用该根目录,所以无法销毁它 代码当前不起作用,因为我无法获取值以继续使用它。 如果你需要这个简单的版本,你可以问我,我会添加它而不是这个 提取元素周期表以打开新窗口开始测验 def prozor(): global top root.withdraw() top=Tk() top.title("Provjera znanja")
def prozor():
global top
root.withdraw()
top=Tk()
top.title("Provjera znanja")
Label(top, text="").grid(row=0,column=0,columnspan=5)
p1=Label(top, text="Provjera znanja").grid(row=1,column=0,columnspan=5)
provjera1=Button(top,text="Provjera znanja za\nprvi stupac elemenata",command=lambda:kviz1()).grid(row=2,column=0)
provjera2=Button(top,text="Provjera znanja za\ndrugi stupac elemenata",command=lambda:kviz1()).grid(row=2,column=1)
provjera3=Button(top,text="Provjera znanja za\ntreci stupac elemenata",command=lambda:kviz1()).grid(row=2,column=2)
provjera4=Button(top,text="Provjera znanja za\ncetvrti stupac elemenata",command=lambda:kviz1()).grid(row=2,column=3)
provjera5=Button(top,text="Provjera znanja za\npeti stupac elemenata",command=lambda:kviz1()).grid(row=2,column=4)
问题和答案我用来在测验中随机生成问题,以及一个问题和正确答案列表,以便稍后与答案进行比较
pitanjaprava=["Koji simbol se koristi za Vodik?","Koji je atomski broj Natrija?","U kojem agregatnom stanju se nalazi Helij?"]
pitanja=["Koji simbol se koristi za Vodik?","Koji je atomski broj Natrija?","U kojem agregatnom stanju se nalazi Helij?"]
pitiodg=[["Koji simbol se koristi za vodik?","H"],["Koji je atomski broj Natrija?","11"],["U kojem agregatnom stanju se nalazi Helij?","Plinovito"]]
odgovori=[["H"],["V"],["W"]],[["11"],["3"],["19"]],[["Kruto"],["Tekuće"],["Plinovito"]]
将问题和答案混合在一起,使它们不会每次都以相同的顺序出现
def kviz1():
global R1,R2,R3,var,p1,x,brojac
brojac=0
x=0
random.shuffle(pitanja)
random.shuffle(odgovori[0])
random.shuffle(odgovori[1])
random.shuffle(odgovori[2])
每当他问一个问题时,他会检查它是否正确,以及它的正确计数器或在我的例子中“brojac”是否会增加一。若并没有问题了,他将结束循环,并用问题填充空列表,撤回新的上根,并回叫主根,并显示所获得的分数
while x < 2:
if len(pitanja) == 0:
x=2
root.deiconify()
top.withdraw()
pitanja.extend(pitanjaprava)
tkMessageBox.showinfo\
("Rezultat","Ostvareni broj bodova = %s" % brojac)
elif pitanja[0] == "Koji simbol se koristi za Vodik?":
var=IntVar()
p1=Label(top, text="Koji simbol se koristi za Vodik?").grid(row=3,column=0,columnspan=4)
R1 = Radiobutton(top, text=odgovori[0][0], variable=var, value=1,command=odg_uzmi).grid(row=5,column=0)
R2 = Radiobutton(top, text=odgovori[0][1], variable=var, value=2,command=odg_uzmi).grid(row=6,column=0)
R3 = Radiobutton(top, text=odgovori[0][2], variable=var, value=3,command=odg_uzmi).grid(row=7,column=0)
submit1=Button(top,text="Odgovori",command=lambda:kv1(root,odg_uzmi)).grid(row=8,column=1)
x=x+1
elif pitanja[0] == "Koji je atomski broj Natrija?":
var=IntVar()
p2=Label(top, text="Koji je atomski broj Natrija?").grid(row=3,column=0,columnspan=4)
R1 = Radiobutton(top, text=odgovori[1][0], variable=var, value=1,command=odg_uzmi).grid(row=5,column=0)
R2 = Radiobutton(top, text=odgovori[1][1], variable=var, value=2,command=odg_uzmi).grid(row=6,column=0)
R3 = Radiobutton(top, text=odgovori[1][2], variable=var, value=3,command=odg_uzmi).grid(row=7,column=0)
submit1=Button(top,text="Odgovori",command=lambda:kv2(root,odg_uzmi)).grid(row=8,column=1)
x=x+1
elif pitanja[0] == "U kojem agregatnom stanju se nalazi Helij?":
var=IntVar()
p2=Label(top, text="U kojem agregatnom stanju se nalazi Helij?").grid(row=3,column=0,columnspan=4)
R1 = Radiobutton(top, text=odgovori[2][0], variable=var, value=1,command=odg_uzmi).grid(row=5,column=0)
R2 = Radiobutton(top, text=odgovori[2][1], variable=var, value=2,command=odg_uzmi).grid(row=6,column=0)
R3 = Radiobutton(top, text=odgovori[2][2], variable=var, value=3,command=odg_uzmi).grid(row=7,column=0)
submit1=Button(top,text="Odgovori",command=lambda:kv3(root,odg_uzmi)).grid(row=8,column=1)
x=x+1
brojac=brojac+1
def odg_uzmi():
global odg_uzmi
odg_uzmi=var.get()
print odg_uzmi
def kv1(root,odgovor):
if odgovor == pitiodg[0][1]:
brojac=brojac+1
del pitanja[0]
return kviz1()
def kv2(root,odgovor):
if odgovor == pitiodg[1][1]:
brojac=brojac+1
del pitanja[0]
return kviz1()
def kv3(root,odgovor):
if odgovor == pitiodg[2][1]:
brojac=brojac+1
del pitanja[0]
return kviz1()`
不要做
var=Widget(…).grid(…)
,因为grid()将None
分配给var
。您必须分两步执行:var=Widget(…)
和var.grid(…)
您是否在console/terminal/cmd.exe/powershell中运行以查看是否没有错误消息?如果您收到错误消息,那么您应该对此提出质疑。完整错误消息-从wordTraceback
@furas开始,如果在cmd中运行,我不会收到错误消息,但我会尝试将小部件和网格分开,然后我会向您发送有关结果的消息!谢谢您的时间。@furas您能检查一下简单版本的代码吗?
def prozor():
global top,brojac
brojac=0
root.withdraw()
top=Tk()
top.title("Provjera znanja")
p1=Label(top, text="Provjera znanja").grid(row=0,column=0,columnspan=4)
provjera1=Button(top,text="Provjera znanja za\nprvi stupac elemenata",command=lambda:kviz1()).grid(row=1,column=0)
provjera2=Button(top,text="Provjera znanja za\ndrugi stupac elemenata",command=lambda:kviz1()).grid(row=1,column=1)
provjera3=Button(top,text="Provjera znanja za\ntreci stupac elemenata",command=lambda:kviz1()).grid(row=1,column=2)
provjera4=Button(top,text="Provjera znanja za\ncetvrti stupac elemenata",command=lambda:kviz1()).grid(row=1,column=3)
provjera5=Button(top,text="Provjera znanja za\npeti stupac elemenata",command=lambda:kviz1()).grid(row=1,column=4)
def kviz1():
global R1,R2,R3,R1a,R2a,R3a,var,odgovor
var= IntVar()
p1=Label(top, text="Koji simbol se koristi za Vodik?").grid(row=2,column=0,columnspan=4)
R1 = Radiobutton(top, text="W", variable=var, value=1).grid(row=3,column=0)
R2 = Radiobutton(top, text="V", variable=var, value=2).grid(row=4,column=0)
R3 = Radiobutton(top, text="H", variable=var, value=3).grid(row=5,column=0)
submit1=Button(top,text="Odgovori",command=lambda:kv1()).grid(row=6,column=1)
def kv1():
global brojac,odgovor
odgovor=var.get()
if odgovor == 3:
brojac=brojac+1
print brojac
else:
print brojac
p1=Label(top, text="Koji je atomski broj Natrija?").grid(row=2,column=0,columnspan=4)
R1a = Radiobutton(top, text="3", variable=var, value=4).grid(row=3,column=0)
R2a = Radiobutton(top, text="11", variable=var, value=5).grid(row=4,column=0)
R3a = Radiobutton(top, text="19", variable=var, value=6).grid(row=5,column=0)
submit1=Button(text="Odgovori",command=lambda:kv2()).grid(row=6,column=1)
def kv2():
global odgovor,brojac
odgovor = var.get()
if odgovor == 5:
brojac=brojac+1
print brojac
else:
print brojac