由于某种原因,它仅显示一个if语句

时间:2018-09-05 11:02:36

标签: python tkinter

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")

当我按下Submit时,该语句仅显示一种错误的方式,我尝试了其他条件(例如,如果不是,否则),但仍显示相同的语句,如果我使用!=,则代码仅显示标签。

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 :(得分:0)

在进行故障排除时,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()

请紧记,每次按下按钮时,您只会打包新标签,因此您应该尝试避免这种情况。您可以通过破坏标签或更新标签来执行此操作,而不是每次按下按钮时都创建新标签。