Python 2.7,Tkinter多项选择题测验(笔记本布局和单选按钮帮助)

Python 2.7,Tkinter多项选择题测验(笔记本布局和单选按钮帮助),python,python-2.7,tkinter,radio-button,tk,Python,Python 2.7,Tkinter,Radio Button,Tk,我是一名学生,作为一名初学者,我对Python知之甚少。然而,我决定做一个选择题测验,其中没有答案是错误的,但所有的答案加起来给你一个总分。我已经将每个问题页面布置到自己的类中,如类问题1(tk.Frame):。我使用的一些代码来自互联网的帮助 我的第一个问题是,如何使每个类成为自己的框架(框架1、框架2等),以便在笔记本布局中使用它 我的第二个问题是,如何从单选按钮(value=1等)获取值,以发送到可能要存储的.csv文件?我脑子里什么都没用 非常感谢您的帮助 from Tkinter im

我是一名学生,作为一名初学者,我对Python知之甚少。然而,我决定做一个选择题测验,其中没有答案是错误的,但所有的答案加起来给你一个总分。我已经将每个问题页面布置到自己的类中,如类问题1(tk.Frame):。我使用的一些代码来自互联网的帮助

我的第一个问题是,如何使每个类成为自己的框架(框架1、框架2等),以便在笔记本布局中使用它

我的第二个问题是,如何从单选按钮(value=1等)获取值,以发送到可能要存储的.csv文件?我脑子里什么都没用

非常感谢您的帮助

from Tkinter import *
import ttk
import Tkinter as tk

LARGE_FONT= ("Arial", 12)

def sel():
            selection = "You selected " + str(var.get())
            label.config(text = selection)

#def answerout():

root = tk.Tk()
var = tk.IntVar()
notebook = ttk.Notebook(root)
frame_1 = ttk.Frame(notebook)
frame_2 = ttk.Frame(notebook)
frame_3 = ttk.Frame(notebook)
frame_4 = ttk.Frame(notebook)
notebook.add(frame_1, text='Home')
notebook.add(frame_2, text='Question 1')
notebook.add(frame_3, text='Question 2')
notebook.add(frame_4, text='Question 3')
notebook.pack(expand=1, fill="both")

class Home(tk.Frame):
    frame1 = Frame(frame_1)
    frame1.pack(side=TOP)
    def __init__(root, parent, controller):
        frame1 = Frame(frame_1)
        frame1.pack(side=TOP)
        tk.Frame.__init__(root,parent)
        label = tk.Label(root, text="This program tries to understand characteristic features of individual students.", font=LARGE_FONT)
        label1 = tk.Label(root, text="Please click start to begin!", font=LARGE_FONT)
        label.pack(pady=10,padx=10)
        label1.pack(pady=10,padx=10)
        button = tk.Button(root, text="Start!",
                            command=lambda: controller.show_frame(Question1))
        button.pack()
        button2 = tk.Button(root, text="Exit",
                            command=lambda: app.destroy())
        button2.pack()

class Question1(tk.Frame):
    def __init__(root, parent, controller):
        tk.Frame.__init__(root, parent)
        label1 = tk.Label(root, text="I make choices based on what I think, not on what I feel.", font=LARGE_FONT)
        label1.pack(pady=10,padx=10)
        R1 = Radiobutton(root, text="Not Often", variable=var, value=1,
                  command=sel)
        R1.pack( anchor = W )

        R2 = Radiobutton(root, text="Sometimes", variable=var, value=2,
                  command=sel)
        R2.pack( anchor = W )

        R3 = Radiobutton(root, text="Often", variable=var, value=3,
                  command=sel)
        R3.pack( anchor = W)
        button1 = tk.Button(root, text="Back to Home",
                            command=lambda: controller.show_frame(Home))
        button1.pack()
        button2 = tk.Button(root, text="Next",
                            command=lambda: controller.show_frame(Question2))
        button2.pack()

class Question2(tk.Frame):
    def __init__(root, parent, controller):
        tk.Frame.__init__(root, parent)
        label = tk.Label(root, text="I challenge people if I don't think they are right.", font=LARGE_FONT)
        label.pack(pady=10,padx=10)
        R4 = Radiobutton(root, text="Not Often", variable=var, value=1,
                  command=sel)
        R4.pack( anchor = W )

        R5 = Radiobutton(root, text="Sometimes", variable=var, value=2,
                  command=sel)
        R5.pack( anchor = W )

        R6 = Radiobutton(root, text="Often", variable=var, value=3,
                  command=sel)
        R6.pack( anchor = W)
        button2 = tk.Button(root, text="Back",
                            command=lambda: controller.show_frame(Question1))
        button2.pack()
        button3 = tk.Button(root, text="Next",
                            command=lambda: controller.show_frame(Question3))
        button3.pack()
        button1 = tk.Button(root, text="Back to Home",
                            command=lambda: controller.show_frame(Home))
        button1.pack()

class Question3(tk.Frame):
    def __init__(root, parent, controller):
        tk.Frame.__init__(root, parent)
        label = tk.Label(root, text="I can change and fit into new situations easily.", font=LARGE_FONT)
        label.pack(pady=10,padx=10)
        R7 = Radiobutton(root, text="Not Often", variable=var, value=1,
                  command=sel)
        R7.pack( anchor = W )

        R8 = Radiobutton(root, text="Sometimes", variable=var, value=2,
                  command=sel)
        R8.pack( anchor = W )

        R9 = Radiobutton(root, text="Often", variable=var, value=3,
                  command=sel)
        R9.pack( anchor = W)
        button2 = tk.Button(root, text="Back",
                            command=lambda: controller.show_frame(Question2))
        button2.pack()
        button3 = tk.Button(root, text="Next (GOES HP)",
                            command=lambda: controller.show_frame(Home))
        button3.pack()
        button1 = tk.Button(root, text="Back to Home",
                            command=lambda: controller.show_frame(Home))

label = Label(root)
label.pack()
app = root
app.geometry('1024x512')
app.wm_title('Brain Thinking Model')
app.iconbitmap(r'fav.ico')
app.mainloop()
root.mainloop()
我的第一个问题是,如何使每个类成为自己的框架(框架1、框架2等),以便在笔记本布局中使用它

要使每个类成为笔记本选项卡,您不需要做很多事情。你已经完成了大部分工作。您的类(
Home
Question1
等)已经是框架,因此您可以直接使用它们。它们都将
控制器
作为参数,因此您需要先创建than,然后创建类的实例,然后将它们添加到笔记本中

controller = <something you did not include in your question>

notebook = ttk.Notebook(root)
frame_1 = Home(notebook, controller)
frame_2 = Question1(notebook, controller)
...
notebook.add(frame_1, text="Home")
notebook.add(frame_2, text="Question 1")
...
由于您使用的是类,因此最佳做法是将
var
作为实例变量。这意味着不创建全局变量,而是在创建radiobutton的函数中创建它。将其分配给实例变量,然后可以在程序中引用该类实例的任何位置引用该实例变量

class Home(...):
    def __init__(...):
        self.var = tk.IntVar()
        R1 = Radiobutton(..., variable=var, value=1, ...)
        ...

frame_1 = Home(...)
...
print("the value is:", frame_1.var.get())

我该怎么做才能成为一个控制器?我已经迷路了xD@GauravKararia例如我不确定。这是你的密码,不是我的。也许回到你复制代码的地方,看看它是如何创建控制器的。
class Home(...):
    def __init__(...):
        self.var = tk.IntVar()
        R1 = Radiobutton(..., variable=var, value=1, ...)
        ...

frame_1 = Home(...)
...
print("the value is:", frame_1.var.get())