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