Tkinter 对话框 showinfo 循环错误
Tkinter dialog showinfo loop error
我是 python 的新手,正在研究 CS 问题,我必须设计一个简单的猜数字游戏。游戏还必须包含一个解释游戏规则的 Tkinter Label 小部件(选择一个 1 - 100 之间的数字),一个接受用户猜测的 Entry 小部件,以及一个调用 class 中的方法的按钮那 1) 确定猜测是高于还是低于 'secret' randint 2) 通过猜测更高或更低来引导用户走向正确,以及 3) 一旦用户得到正确答案就祝贺他们。
在显示信息对话框无限循环的条件之后,我一直 运行 出错。我不知道我哪里出错了,但这是我的代码,我从导入以下内容开始:
from random import randint
from tkinter import Tk, Frame, Button, Entry, Label, END
from tkinter.messagebox import showinfo
class Game(Frame):
'A guessing game where a user picks a number from 1 - 100'
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack()
Label(self, text = "Pick an integer from 1 - 100").grid(row = 0, column = 0)
self.answer = Entry(self, width=20)
self.answer.grid(row=0, column=1)
Button(self, text='Enter', command = self.compute).grid(row = 1, column = 0)
def compute(self):
secret = randint(1, 100)
answer = int(self.answer.get())
while secret != answer:
if answer > secret:
showinfo(message='Guess a lower integer')
self.answer.delete(0, END)
else:
showinfo(message='Guess a higher integer')
self.answer.delete(0, END)
showinfo(message='You are correct!')
如果有人能解释为什么我 运行 进入循环,我可能就能弄清楚其余部分。
问题是因为满足条件secret != answer
一旦进入while循环,就不会退出,因为语句会继续求值True,这就是对话框继续出现的原因。
为了解决这个问题,你可以在调用 showinfo
:
之后放置一个 break
while secret != answer:
if answer > secret:
showinfo(message='Guess a lower integer')
self.answer.delete(0, END)
break
else:
showinfo(message='Guess a higher integer')
self.answer.delete(0, END)
break
showinfo(message='You are correct!')
请注意,最后一个 showinfo
将始终执行,但我相信您可以更改它。
谢谢@Rinzler - 这就是我得到的(如果有人想玩一个没用的'guess a number game')。干杯...
from random import randint
from tkinter import Tk, Frame, Button, Entry, Label, END
from tkinter.messagebox import showinfo
class Game(Frame):
'A guessing game where a user picks a number from 1 - 100'
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack()
Label(self, text = "Pick an integer from 1 - 100").grid(row = 0, column = 0)
self.answer = Entry(self, width=20)
self.answer.grid(row=0, column=1)
Button(self, text='Enter', command = self.compute).grid(row = 1, column = 0)
self.secret = randint(1,100)
def compute(self):
answer = int(self.answer.get())
while self.secret != answer:
if answer > self.secret:
showinfo(message='Guess a lower integer')
self.answer.delete(0, END)
break
else:
showinfo(message='Guess a higher integer')
self.answer.delete(0, END)
break
if self.secret == answer:
showinfo(message='You got it! :)')
我是 python 的新手,正在研究 CS 问题,我必须设计一个简单的猜数字游戏。游戏还必须包含一个解释游戏规则的 Tkinter Label 小部件(选择一个 1 - 100 之间的数字),一个接受用户猜测的 Entry 小部件,以及一个调用 class 中的方法的按钮那 1) 确定猜测是高于还是低于 'secret' randint 2) 通过猜测更高或更低来引导用户走向正确,以及 3) 一旦用户得到正确答案就祝贺他们。
在显示信息对话框无限循环的条件之后,我一直 运行 出错。我不知道我哪里出错了,但这是我的代码,我从导入以下内容开始:
from random import randint
from tkinter import Tk, Frame, Button, Entry, Label, END
from tkinter.messagebox import showinfo
class Game(Frame):
'A guessing game where a user picks a number from 1 - 100'
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack()
Label(self, text = "Pick an integer from 1 - 100").grid(row = 0, column = 0)
self.answer = Entry(self, width=20)
self.answer.grid(row=0, column=1)
Button(self, text='Enter', command = self.compute).grid(row = 1, column = 0)
def compute(self):
secret = randint(1, 100)
answer = int(self.answer.get())
while secret != answer:
if answer > secret:
showinfo(message='Guess a lower integer')
self.answer.delete(0, END)
else:
showinfo(message='Guess a higher integer')
self.answer.delete(0, END)
showinfo(message='You are correct!')
如果有人能解释为什么我 运行 进入循环,我可能就能弄清楚其余部分。
问题是因为满足条件secret != answer
一旦进入while循环,就不会退出,因为语句会继续求值True,这就是对话框继续出现的原因。
为了解决这个问题,你可以在调用 showinfo
:
break
while secret != answer:
if answer > secret:
showinfo(message='Guess a lower integer')
self.answer.delete(0, END)
break
else:
showinfo(message='Guess a higher integer')
self.answer.delete(0, END)
break
showinfo(message='You are correct!')
请注意,最后一个 showinfo
将始终执行,但我相信您可以更改它。
谢谢@Rinzler - 这就是我得到的(如果有人想玩一个没用的'guess a number game')。干杯...
from random import randint
from tkinter import Tk, Frame, Button, Entry, Label, END
from tkinter.messagebox import showinfo
class Game(Frame):
'A guessing game where a user picks a number from 1 - 100'
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack()
Label(self, text = "Pick an integer from 1 - 100").grid(row = 0, column = 0)
self.answer = Entry(self, width=20)
self.answer.grid(row=0, column=1)
Button(self, text='Enter', command = self.compute).grid(row = 1, column = 0)
self.secret = randint(1,100)
def compute(self):
answer = int(self.answer.get())
while self.secret != answer:
if answer > self.secret:
showinfo(message='Guess a lower integer')
self.answer.delete(0, END)
break
else:
showinfo(message='Guess a higher integer')
self.answer.delete(0, END)
break
if self.secret == answer:
showinfo(message='You got it! :)')