Переключатель не возвращает никаких значений в tkinter python

это небольшая часть моего кода, которая по какой-то причине не работает, переключатель - точнее, user_ans всегда не возвращает ничего, хотя до этого он возвращал фактический ответ - я понятия не имею, что произошло, и не могу его отменить. вот код.

from tkinter import *
from tkinter import messagebox
from tkinter.ttk import *
import tkinter
from time import *
import time
import PIL
from PIL import *

#----       ----#
Qright = 0
Qwrong = 0
current_question = 0
pink = 0

def Quizz():
    global pink
    menu.withdraw()
    # define question dictionary
    question = {
        "2+3": ['2', '3', '5', '9'],
        "2-1": ['2', '1', '4'],
        "3+3": ['3', '6', '9', '7'],
        "2+5": ['2', '3', '7', '9'],
        "2-2": ['2', '1', '0'],
        "3+1": ['3', '6', '4', '7'],
        "2+6": ['2', '3', '8', '9'],
        "2-6": ['2', '1', '-4'],
        "3+6": ['3', '6', '9', '7'],
        "3+2": ['3', '6', '5', '7']

    }
    # define answer list
    ans = ['5', '1', '6', '7', '0', '4', '8', '-4', '9', '5']




    def start_quiz():
        print("stage6")
        start_button.forget()
        print("stage7")
        next_button.pack(pady = 10)
        print("stage8")
        next_question()


    def next_question():
        print("stage9")
        global current_question
        if current_question < len(question):
            print("stage10")
            # get key or question that need to be printed
            check_ans()
            print("stage14")
            user_ans.set('None')
            print("stage15")
            c_question = list(question.keys())[current_question]
            print("stage16")
            # clear frame to update its content
            clear_frame()
            print("stage17")
            # printing question
            Label(f1, text=f"Question : {c_question}", font = "calibre 12 normal").pack(anchor=NW)

            print("stage18")
            # printing options
            for option in question[c_question]:
                print("stage19")
                Radiobutton(f1, text=option, variable=user_ans, value=option).pack(anchor=NW)               
                print("stage20")
                print(user_ans.get())
            print("-")
            print(user_ans.get())
            print("-")
            current_question += 1
        else:
            next_button.forget()
            check_ans()
            clear_frame()
            output = f"Your Score is {user_score.get()} out of {len(question)}"
            Label(f1, text=output, font = "calibre 25 bold").pack()
            Label(f1, text = "Thanks for Participating",font = "calibre 18 bold").pack()
            
            '''f = open("results.txt", "a")
            f.write(f"\n {user_score.get()}/{len(question)}")
            f.close()
            exit_button = Button(root, text = "Return to menu", command=lambda:[deiconify,root.destroy]) 
            exit_button.pack(pady=20)'''




            


    def check_ans():
        print("stage11")
        temp_ans = user_ans.get()
        print("stage12")
        print(temp_ans)
        print(ans[current_question-1])
        if temp_ans != 'None' and temp_ans == ans[current_question-1]:
            print("stage13")
            user_score.set(user_score.get()+1)
        else:
            return


    def clear_frame():
        for widget in f1.winfo_children():
            widget.destroy()


    if __name__ == "__main__":
        print("stage0")
        root = Tk()
        print("stage1")
        # setup basic window
        root.title("Main Quiz")
        root.geometry("850x520")
        root.minsize(800, 400)
        root.wm_attributes('-transparentcolor', '#000001')

        user_ans = StringVar()
        user_ans.set('None')
        user_score = IntVar()
        user_score.set(0)
        print("stage2")
        print(pink)
        if pink == 0:
            Label(root, text = "Quiz", font = "calibre 20 bold").pack()#could add background = "colour"
        else:
            Label(root, text = "Quiz", font = "calibre 20 bold",background=("pink")).pack()#could add background = "colour"
            root.configure(background='pink')

        print("stage3")
        #Label(root, text = "", font = "calibre 10 bold").pack()
        print("stage4")
        start_button = Button(root, text = "Start Quiz",command=start_quiz)
        start_button.pack(pady = 10)
        print("stage5")
        f1 = Frame(root)
        f1.pack(side=TOP, fill=X)

        next_button = Button(root, text = "Next Question",command=next_question)

        root.mainloop()

Я пытался заменить переключатель, но мне нужно его использовать. Я пробовал заменить check_ans новой функцией и другими опциями, но ничего не работает. Я просто не могу это исправить, и на это уйдет много времени. Я всего лишь студент, и все мои поиски возвращают решения с помощью ttk.Radiobutton, которые, я думаю, ко мне не относятся. Мой код очень специфичен, и его сложно найти, поэтому мне просто нужно личное мнение. Спасибо!

Можете ли вы попытаться свести это к минимально воспроизводимому примеру, пожалуйста? Также стоит отметить, что вам не нужен импорт * в дополнение к обычному импорту. Обычно вы используете import tkinter as tk и виджеты с префиксом tk., например. tk.Label и from tkinter import ttk для ttk доступа. Точно так же вам не нужны from time import * или from PIL import * — лучше использовать только import time и import PIL.

JRiggles 31.07.2024 14:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я не мог увидеть, правильно ли установлено значение user_ans, потому что вы иногда устанавливаете для него значение «Нет», я не уверен, установили ли вы его в какой-либо другой части кода.

Вы можете попробовать параметр команды RadioButton в tkinter, как показано ниже:

Сначала добавьте этот метод:

def on_radio_button_selected():
    print("CHECK: Selected option is: ", user_ans.get())

Затем измените код переключателя, как показано ниже:

Radiobutton(f1, text=option, variable=user_ans, value=option, command=on_radio_button_selected).pack(anchor=NW)               

После этого, когда вы нажимаете на переключатель, он должен записать свое значение. Тогда вы можете увидеть проблему, если она связана с опцией или переменной, или вы можете просто управлять значением в функции on_radio_button_selected.

Попробую, спасибо за ответ!

MW2306RC 01.08.2024 00:53
Ответ принят как подходящий

это небольшая часть моего кода, которая по какой-то причине не работает, переключатель - user_ans, более конкретно, всегда не возвращает ничего, когда прежде чем он вернул фактический ответ

попробовал заменить check_ans новой функцией и другими опциями, но ничего не работает

Проблема может быть решена.

Закомментируйте функцию Quizz(). Итак, вы можете увидеть Radiobutton на лету.

#def Quizz():
    #global pink
    #menu.withdraw()
    # define question dictionary
question = {
    "2+3": ['2', '3', '5', '9'],
    "2-1": ['2', '1', '4'],
    "3+3": ['3', '6', '9', '7'],
    "2+5": ['2', '3', '7', '9'],
    "2-2": ['2', '1', '0'],
    "3+1": ['3', '6', '4', '7'],
    "2+6": ['2', '3', '8', '9'],
    "2-6": ['2', '1', '-4'],
    "3+6": ['3', '6', '9', '7'],
    "3+2": ['3', '6', '5', '7']

}
# define answer list
ans = ['5', '1', '6', '7', '0', '4', '8', '-4', '9', '5']

Вы готовы идти.

Скриншот:

Большое спасибо за это, кстати! Всего несколько вопросов, я студент колледжа, так что все очень просто, но как и почему это работает? Еще раз спасибо.

MW2306RC 01.08.2024 00:51

Вы должны следить за тем, как проходит викторина. На сайте тонны. Вам полезно написать текстовый файл, сохранить его и загрузить.

toyota Supra 01.08.2024 02:31

Другие вопросы по теме