【问题标题】:Tkinter dialog showinfo loop errorTkinter 对话框 showinfo 循环错误
【发布时间】:2015-02-04 02:49:04
【问题描述】:

我是 python 的新手,我正在研究一个 CS 问题,我必须设计一个简单的猜数字游戏。游戏还必须包含一个解释游戏规则的 Tkinter Label 小部件(选择一个介于 1 到 100 之间的数字),一个接受用户猜测的 Entry 小部件,以及一个用于调用类中方法的按钮 1) 确定如果猜测高于或低于“秘密”随机数 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!')

如果有人能解释为什么我会陷入循环,我可能会弄清楚其余的。

【问题讨论】:

    标签: python tkinter dialog tkinter-entry


    【解决方案1】:

    问题是一旦你进入while循环,因为满足条件secret != answer,你不会退出,因为语句会继续被评估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 将始终被执行,但我相信你可以改变它。

    【讨论】:

      【解决方案2】:

      谢谢@Rinzler - 这就是我得到的(如果有人想玩一个无用的“猜数字游戏”)。干杯...

      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! :)')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-03
        • 2019-10-28
        相关资源
        最近更新 更多