2016-08-09 25 views
0

Ich benutze Tkinter für eine GUI. Ich habe ein Fenster mit zwei Radiobutton (‚Ja‘ und ‚Nein‘), aber wenn ich eine auswählen, führen Sie es nicht das Skript:Fehler mit Radiobutton - tkinter

root = Tk() 

Button(root, text='TEST', command=root.quit).pack() 

root.mainloop() 

master = Tk() 
v = IntVar() 

Radiobutton(master, text='Yes', variable=v, value=0).pack() 
Radiobutton(master, text='No', variable=v, value=1).pack() 
Button(master, text='Exit', command=master.quit).pack() 

master.mainloop() 

print(v.get()) 

if v.get() == 0: 
    testy = Tk() 
    Label(testy, text='Bad').pack() 
    testy.mainloop() 

else: 
    testn = Tk() 
    Label(testn, text='Bad').pack() 
    testn.mainloop() 

Wenn ich nicht das erste Fenster habe es funktioniert aber damit nicht.

Jemand kann dieses Problem beheben?

Antwort

1
  1. Sie haben mehrere Tk() Systeme initiiert, aber es sollte nur eins geben.
  2. Wenn Sie ein neues Fenster erhalten möchten, verwenden Sie Toplevel()
  3. Kein Code wird nach mainloop() mit Ausnahme von Ereignissen ausgeführt. Der Code fließt erst nach dem Schließen der Fenster nach mainloop weiter.

So, hier ist der Code mit Fehlerbehebungen:

from tkinter import * 

root = Tk() 

Button(root, text='TEST', command=root.quit).pack() 

master = Toplevel() 
v = IntVar() 

def check_radio(): 
    print(v.get()) 

    if v.get() == 0: 
     Label(Toplevel(), text='Bad').pack() 
    else: 
     Label(Toplevel(), text='Good').pack() 


Radiobutton(master, text='Yes', variable=v, value=0, command=check_radio).pack() 
Radiobutton(master, text='No', variable=v, value=1, command=check_radio).pack() 
Button(master, text='Exit', command=master.quit).pack() 

root.mainloop() 

prüfen sorgfältig, ich die Eltern von Widgets und andere Änderungen geändert.

+0

Ok danke und wenn ich die Infos von Radiobutton zurückbekommen möchte, wie muss ich das machen? – mson

+0

Wie Sie im Code sehen können, habe ich einen weiteren Arg zur Erstellung des Radiobuttons hinzugefügt: command = check_radio, die check_radio beim Drücken des Radiobuttons aufruft –

0

Mögliches Duplikat von tkinter radiobutton not updating variable, aber da diese Frage zuerst gestellt wurde, könnte die Antwort hier mehr Sinn ergeben.


Vergewissern Sie sich, einen Master an den IntVar wie self.rbv=tk.IntVar(master) #or 'root' or whatever you are using) zuweisen:

import Tkinter as tk 
import ttk 

class My_GUI: 

    def __init__(self,master): 
     self.master=master 
     master.title("TestRadio") 

     self.rbv=tk.IntVar(master)#<--- HERE! notice I specify 'master' 
     self.rb1=tk.Radiobutton(master,text="Radio1",variable=self.rbv,value=0,indicatoron=False,command=self.onRadioChange) 
     self.rb1.pack(side='left') 
     self.rb2=tk.Radiobutton(master,text="Radio2",variable=self.rbv,value=1,indicatoron=False,command=self.onRadioChange) 
     self.rb2.pack(side='left') 
     self.rb3=tk.Radiobutton(master,text="Radio3",variable=self.rbv,value=2,indicatoron=False,command=self.onRadioChange) 
     self.rb3.pack(side='left') 

    def onRadioChange(self,event=None): 
     print self.rbv.get() 

root=tk.Tk() 
gui=My_GUI(root) 
root.mainloop() 

versuchen Sie, dass Sie in den verschiedenen Tasten (sie sind Radiobuttons aber mit indicatoron = False) und Sie werden es sehen druckt korrekt geänderte Werte!