По какой-то причине он отображает только один оператор 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()
        else:
            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()

Ответы [ 2 ]

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

Вы должны заменить строку:

        if Entryfield == Random:

С линией:

        if Entryfield.get() == Random['text']:

Это означает, что вместо сравнения виджета Entry и виджета Label вы сравниваете текст каждого из них.


Также обратите внимание, что:

        from tkinter import *

Должно быть:

from tkinter import *

(это очевидно, вероятно, просто опечатка)


И это, вероятно, поможет вам удалить строку:

root.geometry("800x400")

Без этой строки окно автоматически изменит размеры, чтобы вместить все виджеты.


Также, что строка:

              command=lambda: Random.pack_forget() + Begin.pack_forget())

Будет вызывать ошибку при вызове, потому что lambda не работает так: вы не можете просто добавить функции. Вместо этого я бы создал новую функцию:

def begin_func():
    Random.pack_forget()
    Begin.pack_forget()

И измените строку на:

              command=begin_func)

Наконец, я предполагаю, что вы хотите, чтобы ответ набирался только после нажатия Begin, для достижения этого вам необходимо изменить:

Entryfield = Entry(f1, font=("Chewy", 22))

Кому:

Entryfield = Entry(f1, font=("Chewy", 22), state=DISABLED)

И добавить следующую строку в begin_func:

    Entryfield.config(state=NORMAL)

В общем, окончательный код должен быть:

from tkinter import *
import random

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


def raise_frame(frame):
    frame.tkraise()

def begin_func():
    Random.pack_forget()
    Begin.pack_forget()
    Entryfield.config(state=NORMAL)

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), state=DISABLED)
Entryfield.pack(pady=105)

Begin = Button(f1, text='Begin', font=("Chewy", 24), bg="#00CDCD",
                  command=begin_func)
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.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()


raise_frame(f1)
root.mainloop()
0 голосов
/ 05 сентября 2018

У вас есть несколько проблем. Если вы хотите получить текст записи, вы должны использовать Entry.get(), и он вернет текст. Во-вторых, вам нужно получить текст метки, чтобы проверить равенство. Для этого вы можете использовать Label["text"], и он даст вам текст метки, так как метод get не работает на метке. Также удалите пробелы между текстом метки в состоянии if. Я также исправил ваш код отступа.
Ваше условие может быть как: if Entryfield.get() == "".join(Random["text"].split(" ")):

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.get() == "".join(Random["text"].split(" ")):
        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()


raise_frame(f1)
root.geometry("800x400")
root.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...