Почему все переключатели уже предварительно выбраны, когда я запускаю код?Я пытался отменить выбор, но это не работает.пожалуйста - PullRequest
0 голосов
/ 13 июня 2019

Почему все радиокнопки уже предварительно выбраны, когда я запускаю код? Я пытался отменить выбор, но это не работает. Также первая радио кнопка не выбрана, но когда я наводю на нее курсор мыши, она выбирается. Пожалуйста помоги. Обновлен код и даны дополнительные модули для справки. Я хочу, чтобы радиокнопки были выбраны, и когда нажмите «Отправить», я хочу знать, является ли ответ правильным или нет. Но когда я использую self.var.get (), я всегда получаю 0 в качестве значения, что лишает меня возможности помочь мне проверить мой ответ.

class Question:
    def __init__(self, question, answers, correctLetter):
        self.question = question
        self.answers = answers
        self.correctLetter = correctLetter



    def check(self, letter, view):
        print(self.var2.get())
        global right
        if(letter == self.correctLetter):
            label = Label(view, text="RIGHT!",bg='black',fg='green',font=("Calibri 11 bold"))
            right += 1
        else:
            label = Label(view, text="WRONG!",bg='black',fg='red',font=("Calibri 11 bold"))
##        label.pack()
        label.grid(row=10, column=2)
        view.after(1000, lambda *args: self.unpackView(view))


    def getView(self, window):

        view = Frame(window)

        self.var=IntVar()
        self.var1=IntVar()
        self.var2=IntVar()
        self.var3=IntVar()



        Label(view, text="Question: ").grid(sticky = W)
        Label(view, text=self.question).grid(sticky = E)


        r1=Checkbutton(view,text=self.answers[0],variable=self.var,onvalue = 1, offvalue = 0,command=lambda *args: self.check("A", view))
        r1.grid(sticky=W)

        Label(screen,text="").pack()


        r2=Checkbutton(view,text=self.answers[1],variable=self.var1,onvalue = 1, offvalue = 0,command=lambda *args: self.check("B", view))
        r2.grid(sticky=W)

        Label(screen,text="").pack()

        r3=Checkbutton(view,text=self.answers[2],variable=self.var2,onvalue = 1, offvalue = 0,command=lambda *args: self.check("C", view))
        r3.grid(sticky=W)

        Label(screen,text="").pack()

        r4=Checkbutton(view,text=self.answers[3],variable=self.var3,onvalue = 1, offvalue = 0,command=lambda *args: self.check("D", view))
        r4.grid(sticky=W)

        Label(screen,text="").pack()



        #tk.Radiobutton(view,text=self.answers[0],bg='white',font=('calibri',11),command=lambda *args: self.check("A", view),height=1,width=10).grid(row=5, column=2)
        #tk.Radiobutton(view,text=self.answers[0],bg='white',font=('calibri',11),command=lambda *args: self.check("B", view),height=1,width=10).grid(row=6, column=2)
        #tk.Radiobutton(view,text=self.answers[2],bg='white',font=('calibri',11),command=lambda *args: self.check("C", view),height=1,width=10).grid(row=7, column=2)
        #tk.Radiobutton(view,text=self.answers[3],bg='white',font=('calibri',11),command=lambda *args: self.check("D", view),height=1,width=10).grid(row=8, column=2)
        #Button(view,text='SUBMIT',fg='black',bg='white',font=('calibri',11),command=lambda *args: self.check(view),height=1,width=10).grid(sticky=SE)
        return view

    def unpackView(self, view):

        view.pack_forget()
        askQuestion()


def askQuestion():

    global questions, window, index, button, right, number_of_questions

    if(len(questions) == index + 1):
        Label(window, text="Thank you for answering the questions. " + str(right) + " of " + str(number_of_questions) + " questions answered right").place(x=40,y=400)
        return
    button.pack_forget()
    index += 1
    questions[index].getView(window).pack(padx=100,pady=100)

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Все радиопереключатели в группе должны совместно использовать один экземпляр переменной tkinter (StringVar, IntVar и т. Д.).Каждая радиопереключатель также нуждается в уникальном значении.Когда вы сделаете это и установите переменную в одно из значений, будет выбрана только радиокнопка с этим значением.

В вашем коде вы не присваиваете ни одной радиокнопке значение, поэтому значение по умолчанию равно 0(ноль) был установлен.Поскольку все они имели одинаковую ценность, все они были установлены.

Пример:

import tkinter as tk

root = tk.Tk()

var = tk.IntVar(value=0)
r0 = tk.Radiobutton(root, text="Zero", value=0, variable=var)
r1 = tk.Radiobutton(root, text="One", value=1, variable=var)
r2 = tk.Radiobutton(root, text="Two", value=2, variable=var)
r3 = tk.Radiobutton(root, text="Three", value=3, variable=var)

r0.pack(side="top", anchor="w")
r1.pack(side="top", anchor="w")
r2.pack(side="top", anchor="w")
r3.pack(side="top", anchor="w")

tk.mainloop()
0 голосов
/ 13 июня 2019

Вам нужно инициализировать IntVar значением, которое вы хотите выбрать по умолчанию, или значением, которое не является опцией, если вы не хотите, чтобы оно было выбрано по умолчанию.

self.var=IntVar(value=1) # select the first Radiobutton on boot
self.var=IntVar(value=99) # no Radiobutton is selected on boot
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...