Python Tkinter var.get() won't get value when main root is withdrawn

83 Views Asked by At

I'm having problem getting value from radio button after I withdraw main root and call new one on top of it. It was working when I destroyed main root, but since I need to use that root later again , I can't destroy it! .

Code isn't currently working because I can't get value to continue working on it. If you need simple version of this , you may ask me and I'll add it instead of this one.

Withdrawing periodic table of elements to open new window to start a quizz.

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) 
    
  

Questions and answers Im using to random generate questions in quizz , and one list of question and correct answer to compare with answers later.

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"]]

Shuffling questions and answers so they dont appear in same order everytime

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])

Whenever he ask one question he will check if its correct or not, and if its correct counter or in my case "brojac" will be increased by one. If there's no question left, he will end loop and fill that empty list with questions and withdraw that new top root and call main root back and show number of points achieved !

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()`

I was trying really a lot to get it work and end up losing in code totally. If you could solve me that var.get() part so I could get value and compare to list with question and correct answer to see if user answered right or wrong ,I would be very thankful.

Simple version of the code and still not working, I tried to separate grid with radio button and wont work!

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
0

There are 0 best solutions below