по какой-то причине он отображает только один оператор if - PullRequest
0 голосов
/ 05 сентября 2018
from tkinter import *

    import random

easy = ['A','V','M','P','O','E']
random.shuffle(easy)




def raise_frame(frame):
    frame.tkraise()

root = Tk()

f1 = Frame(root)
f2 = Frame(root)
f3 = Frame(root)
f4 = Frame(root)

for frame in (f1, f2, f3, f4):
    frame.grid(row=0, column=0, sticky='news')

Random = Label(f1, text=easy, bg="#00CDCD", font=("Chewy", 20))
Random.pack(side="top", fill="x", pady=20)

Entryfield = Entry(f1, font=("Chewy", 22))
Entryfield.pack(pady=105)

Begin = Button(f1, text='Begin', font=("Chewy", 24), bg="#00CDCD",
                  command=lambda: Random.pack_forget() + Begin.pack_forget())
Begin.pack(side="bottom", fill="both")

Submit = Button(f1, text="Submit", bg="#00CDCD", font=("Chewy", 24), command=lambda: winlose())
Submit.pack(fill="x", side="bottom")

Это утверждение только показывает неверно в любом случае, когда я нажимаю "Отправить", я пробовал другие условия, такие как, если нет, но все же отображает то же утверждение, код отображает только метку, если я использую! =.

def winlose():
    if Entryfield == Random:
        Win = ("Your answer was correct")
        tts = Label(f1, text=Win, font=('Chewy', 20), bg="#00CDCD")
        tts.pack()

    elif Random != Entryfield.get():
        L = ("Your answer is wrong")
        ttr = Label(f1, text=L, font=('Chewy', 20), bg="#00CDCD")
        ttr.pack()


raise_frame(f1)
root.geometry("800x400")
root.mainloop()

1 Ответ

0 голосов
/ 05 сентября 2018

Оператор print() - хороший стартовый инструмент при устранении неполадок. Если вы потратите время на его использование, вы увидите, что ваше сравнение в ваших if/elif утверждениях никогда не будет верным.

Например, я добавил несколько строк печати к вашей функции winlose() следующим образом:

def winlose():
    print("The Entryfield is an object called {}".format(Entryfield))
    print("The Random label is an object called {}".format(Random))
    print("The the content of Entryfield is as string: {}".format(Entryfield.get()))

Вот что мы получаем в консоли:

The Entryfield is an object called .!frame.!entry
The Random label is an object called .!frame.!label
The the content of Entryfield is a string: Test

Похоже, что вы хотите сравнить список easy с тем, что пользователь вводит в поле ввода. Вы можете сделать это, используя индекс первой позиции в списке и используя get() в поле ввода.

Попробуйте эту функцию вместо:

def winlose():
    if Entryfield.get() == easy[0]:
        Win = ("Your answer was correct")
        tts = Label(f1, text=Win, font=('Chewy', 20), bg="#00CDCD")
        tts.pack()
    else:
        L = ("Your answer is wrong")
        ttr = Label(f1, text=L, font=('Chewy', 20), bg="#00CDCD")
        ttr.pack()

Если вы действительно хотите использовать метку в этом сравнении, вам нужно указать, что вы сравниваете текст с меткой, а не сам объект метки.

Эта функция будет выглядеть так:

def winlose():
    if Entryfield.get() == Random["text"]:
        Win = ("Your answer was correct")
        tts = Label(f1, text=Win, font=('Chewy', 20), bg="#00CDCD")
        tts.pack()
    else:
        L = ("Your answer is wrong")
        ttr = Label(f1, text=L, font=('Chewy', 20), bg="#00CDCD")
        ttr.pack()

Имейте в виду, что сейчас вы будете просто упаковывать новые ярлыки каждый раз, когда нажимаете кнопку, поэтому вам следует попытаться избежать этого. Это можно сделать, уничтожив ярлык или обновив ярлык, вместо того, чтобы создавать новые каждый раз, когда вы нажимаете кнопку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...