python - 由于某种原因,它只显示一个 if 语句
问题描述
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")
此语句仅在我按下提交时显示不正确,我尝试了其他条件,例如 if not 和 else 但仍然显示相同的语句代码仅在我使用时显示标签!=。
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()
解决方案
您应该替换该行:
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()
推荐阅读
- callback - 如何在 Dash/Plotly 的聚集条形图中通过回调保持选定数据的持久性
- reactjs - 动态更改变量名的一部分?
- amazon-web-services - AWS 中是否可以订阅 EC2 创建/启动/停止/终止的事件?
- ios - iOS 照片库 - 如何获取真实的文件名?
- ios - 创建线程安全单例的正确方法是什么?
- azure - 在 IIS web.config 中使用动态 IP 安全设置时忽略某些 IP 或 IP 范围
- excel - 如何跨列的动态范围复制单元格
- javascript - Chart.js yAxis 隐藏数据
- javascript - JSZip 创建损坏的 JPG 图像
- xslt - 一旦条件成立,是否有任何方法可以立即退出每个循环?