没有从tkinter中的其他函数(def)获取radiobutton'值',如何在不使用类的情况下实现此目的?

时间:2018-04-18 15:58:56

标签: python tkinter

没有从tkinter中的其他函数(def)获取radiobutton'值',如何在不使用类的情况下实现此目的?

在这种情况下,a = a1.get()不会从ques1()函数的命令(sub1按钮)中获取值。

来自tkinter import *

StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);
sb.append(c);
// ...etc...
String str = sb.toString();

3 个答案:

答案 0 :(得分:2)

这是在程序中多次使用Tk的副作用。基本上,“a1”与“根”窗口相关联,当你销毁“root”时,“a1”将不再起作用。

您有几个选择:

  1. 始终打开同一个窗口,然后换掉 Frames
  2. 使用Toplevel()制作新窗口,而不是Tk
  3. 选项1似乎对你最好。这是:

    from tkinter import *
    
    root=Tk()
    root.geometry("500x500")
    a1=StringVar(value='hippidy')
    ans1=StringVar()
    
    def ans1():
        a=a1.get()  #not getting it from ques1()
        print(repr(a))
    
    def ques1():
        global frame
        frame.destroy() # destroy old frame
        frame = Frame(root) # make a new frame
        frame.pack()
    
        question1=Label(frame, text="How many Planets are there in Solar System").grid()
        q1r1=Radiobutton(frame, text='op 1', variable=a1, value="correct").grid()
        q1r2=Radiobutton(frame, text='op 2', variable=a1, value="incorrect").grid()
        sub1=Button(frame, text="Submit", command=ans1).grid()
        next1But=Button(frame, text="Next Question", command=ques2).grid()
    
    def ques2():
        global frame
        frame.destroy() # destroy old frame
        frame = Frame(root) # make a new frame
        frame.pack()
    
        question2=Label(frame, text="How many Planets are there in Solar System").grid()
        next2But=Button(frame, text="Next Question")
    
    frame = Frame(root) # make a new frame
    frame.pack()
    button=Button(frame,text="Start Test", command=ques1).grid()
    
    root.mainloop()
    

    另外,不要害怕上课。他们都是伟大的。

    此外,您知道在同一行上进行窗口小部件初始化和布局的方式会导致错误。总是使用2行。所以不是这个

    button=Button(frame,text="Start Test", command=ques1).grid()
    

    使用此:

    button=Button(frame,text="Start Test", command=ques1)
    button.grid()
    

答案 1 :(得分:1)

您需要使用Tk的单个实例。无法从另一个中访问在一个中创建的变量和小部件。

答案 2 :(得分:0)

您的代码有一些常见错误。您正在为每个问题创建一个新窗口。这不是一个好主意。您可以使用Toplevel,但我建议您使用root。您可以销毁所有先前的小部件并放置新的小部件。当第一个问题时,两个单选按钮均未选中,并且在未选择任何一个时返回0。您正在Window1中创建按钮,因此必须将其与var关联。

from tkinter import *
global root
root=Tk()
root.geometry("500x500")
a1=StringVar(root)
a1.set(0)  #unchecking all radiobuttons
ans1=StringVar()

def ans1():
    a=a1.get()
    print(a)

def ques1():
    for widget in root.winfo_children():
        widget.destroy() #destroying all widgets
    question1=Label(root, text="How many Planets are there in Solar System").grid()
    q1r1=Radiobutton(root, text='op 1', variable=a1, value="correct").grid()
    q1r2=Radiobutton(root, text='op 2', variable=a1, value="incorrect").grid()
    sub1=Button(root, text="Submit", command=ans1).grid()
    next1But=Button(root, text="Next Question", command=ques2).grid()
def ques2():
    for widget in root.winfo_children():
        widget.destroy()
    question2=Label(root, text="How many Planets are there in Solar System").grid()
    next2But=Button(root, text="Next Question")


button=Button(root,text="Start Test", command=ques1)
button.grid()