Как убедиться, что выбран переключатель - PullRequest
0 голосов
/ 02 июня 2019

Я провожу эксперимент, в котором я представляю стимулы участникам и задаю им вопросы после каждого стимула.У меня четыре вопроса, каждый в отдельной рамке.Ответом на каждый вопрос является выбор одной из семи радиокнопок.У меня также есть кнопка в отдельном кадре для сохранения значений выборов и представления следующего стимула.Проблема здесь в том, что если участник забыл выбрать одну из радиокнопок, значение этой кнопки будет сохранено как 0, и я хочу избежать этого.Я попытался создать условие, чтобы включить следующую кнопку стимула, только если были выбраны все радиокнопки, и у меня не получилось.Есть ли способ для этого?

import Tkinter as tk
import PIL.Image 
import PIL.ImageTk
import tkMessageBox
from Tkinter import *

def present(tacton):
    qual_frame = tk.LabelFrame(group, padx=30, pady=30)
    qual_frame.grid(row=0, column=1)


    urgency_frame = tk.LabelFrame(qual_frame, text="How Urgent was the 
    stimulus?", padx=15, pady=30, font = "Verdana 14")
    urgency_frame.grid(row=1, column=0)
    urgency  = tk.IntVar()
    Radiobutton(master=urgency_frame, text="1 (Not at all)          ", 
    variable=urgency , value=1, font = "Verdana 12").grid(row=0, column=0)
    Radiobutton(master=urgency_frame, text="2                       ", 
    variable=urgency , value=2, font = "Verdana 12").grid(row=0, column=1)
    Radiobutton(master=urgency_frame, text="3                       ", 
    variable=urgency , value=3, font = "Verdana 12").grid(row=0, column=2)
    Radiobutton(master=urgency_frame, text="4 (Neutral)             ", 
    variable=urgency , value=4, font = "Verdana 12").grid(row=0, column=3)
    Radiobutton(master=urgency_frame, text="5                       ", 
    variable=urgency , value=5, font = "Verdana 12").grid(row=0, column=4)
    Radiobutton(master=urgency_frame, text="6                       ", 
    variable=urgency , value=6, font = "Verdana 12").grid(row=0, column=5)
    Radiobutton(master=urgency_frame, text="7 (Very much)", variable=urgency , 
    value=7, font = "Verdana 12").grid(row=0, column=6) 

    annoyance_frame = tk.LabelFrame(qual_frame, text="How Annoying was the 
    stimulus?", padx=15, pady=30, font = "Verdana 14")
    annoyance_frame.grid(row=5, column=0, sticky="nsew")
    annoyance = tk.IntVar()
    Radiobutton(master=annoyance_frame, text="1 (Not at all)          ", 
    variable=annoyance, value=1, font = "Verdana 12").grid(row=0, column=0)
    Radiobutton(master=annoyance_frame, text="2                       ", 
    variable=annoyance, value=2, font = "Verdana 12").grid(row=0, column=1)
    Radiobutton(master=annoyance_frame, text="3                       ", 
    variable=annoyance, value=3, font = "Verdana 12").grid(row=0, column=2)
    Radiobutton(master=annoyance_frame, text="4 (Neutral)             ", 
    variable=annoyance, value=4, font = "Verdana 12").grid(row=0, column=3)
    Radiobutton(master=annoyance_frame, text="5                       ", 
    variable=annoyance, value=5, font = "Verdana 12").grid(row=0, column=4)
    Radiobutton(master=annoyance_frame, text="6                       ", 
    variable=annoyance, value=6, font = "Verdana 12").grid(row=0, column=5)
    Radiobutton(master=annoyance_frame, text="7 (Very much)",  
    variable=annoyance, value=7, font = "Verdana 12").grid(row=0, column=6) 


    valence_frame = tk.LabelFrame(qual_frame, text = 'How Pleasant was the 
    stimulus?', padx = 15, pady = 30, font = "Verdana 14")
    valence_frame.grid(row=10, column=0, sticky="nsew")
    valence = tk.IntVar()
    Radiobutton(master=valence_frame, text="1 (Not at all)          ", 
    variable=valence, value=1, font = "Verdana 12").grid(row=0, column=0)
    Radiobutton(master=valence_frame, text="2                       ", 
    variable=valence, value=2, font = "Verdana 12").grid(row=0, column=1)
    Radiobutton(master=valence_frame, text="3                       ", 
    variable=valence, value=3, font = "Verdana 12").grid(row=0, column=2)
    Radiobutton(master=valence_frame, text="4 (Neutral)             ", 
    variable=valence, value=4, font = "Verdana 12").grid(row=0, column=3)
    Radiobutton(master=valence_frame, text="5                       ", 
    variable=valence, value=5, font = "Verdana 12").grid(row=0, column=4)
    Radiobutton(master=valence_frame, text="6                       ", 
    variable=valence, value=6, font = "Verdana 12").grid(row=0, column=5)
    Radiobutton(master=valence_frame, text="7 (Very much)",  variable=valence, 
    value=7, font = "Verdana 12").grid(row=0, column=6) 


    arousal_frame = tk.LabelFrame(qual_frame, text = 'How Exciting was the 
    stimulus?', padx = 15, pady = 30, font = "Verdana 14")
    arousal_frame.grid(row=15, column=0, sticky="nsew")
    arousal = tk.IntVar()
    Radiobutton(master=arousal_frame, text="1 (Not at all)          ", 
    variable=arousal, value=1, font = "Verdana 12").grid(row=0, column=0)
    Radiobutton(master=arousal_frame, text="2                       ", 
    variable=arousal, value=2, font = "Verdana 12").grid(row=0, column=1)
    Radiobutton(master=arousal_frame, text="3                       ", 
    variable=arousal, value=3, font = "Verdana 12").grid(row=0, column=2)
    Radiobutton(master=arousal_frame, text="4 (Neutral)             ", 
    variable=arousal, value=4, font = "Verdana 12").grid(row=0, column=3)
    Radiobutton(master=arousal_frame, text="5                       ", 
    variable=arousal, value=5, font = "Verdana 12").grid(row=0, column=4)
    Radiobutton(master=arousal_frame, text="6                       ", 
    variable=arousal, value=6, font = "Verdana 12").grid(row=0, column=5)
    Radiobutton(master=arousal_frame, text="7 (Very much)",  variable=arousal, 
    value=7, font = "Verdana 12").grid(row=0, column=6) 



    next_frame = tk.LabelFrame(group, padx=20, pady=20)
    next_frame.grid(row=6, column=1)

    Next_Stimulus = tk.Button(master=next_frame, text="Next Stimulus",  
    bg="green", padx=20, pady=20, width=20, font = "Verdana 12")
    Next_Stimulus.pack()



    root.mainloop()

1 Ответ

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

Либо вы можете позволить кнопке быть активной все время и проверять условия при ее нажатии, переходя к следующему стимулу, если установлены все переменные:

if all([urgency.get(), annoyance.get()] ... etc):
    # go to next stimulus

Или вы можете отслеживать изменения вIntVars и кнопка включения только тогда, когда все установлены.Для каждого IntVar установите трассировку:

urgency.trace('w', enable_button)

Затем проверьте состояния IntVar в функции обратного вызова:

def enable_button(*args):
    if all([urgency.get(), annoyance.get()] ... etc):
        Next_Stimulus.config(state=tk.NORMAL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...