2017-08-31 35 views
2

我是一名学生,作为初学者,我不太了解Python。然而,我决定做一个多选题测验,其中没有答案是不正确的,但所有的答案加起来给你一个总分。我已经将每个问题页面放到自己的类中,如课程Question1(tk.Frame):.我使用的一些代码是从互联网的帮助...Python 2.7,Tkinter多选题测验(笔记本布局和单选按钮帮助)

我的第一个问题是,我如何让每个类成为自己的帧(frame_1,frame_2等...),所以我可以使用它在笔记本布局?

我的第二个问题是,如何从单选按钮(值= 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() 

回答

0

我的第一个问题是,如何获得每个类成为自己的框架(FRAME_1,frame_2,等...),所以我可以在笔记本布局使用它呢?

没有太多的事情需要做,使每个类的笔记本选项卡。你已经完成了大部分工作。你的课程(Home,Question1等)已经是框架,所以你可以直接使用它们。他们每个人都以controller作为参数,因此您需要创建该类的实例,然后将其添加到笔记本中。

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") 
... 

我的第二个问题是,我如何才能从单选按钮值(值= 1,等等)发送到可能的.csv文件储存在哪里?

您需要引用与单选按钮相关的变量。有了这个,你可以拨打get方法来获得价值。

var = tk.IntVar() 
... 
R1 = Radiobutton(..., variable=var, value=1, ...) 
... 
value = var.get() 

由于您使用的类,最好的做法是让var一个实例变量。这意味着,不是创建一个全局变量,而是在创建单选按钮的函数中创建它。您将它分配给一个实例变量,然后您可以引用程序中引用该类实例的任何地方。

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()) 
+0

我该怎么做一个控制器?我大多已经失去了xD –

+0

@GauravKararia:我不确定。这是你的代码不是我的。也许回到你复制代码的地方,看看它是如何创建一个控制器的。 –