【问题标题】:Input accepted by GUIGUI 接受的输入
【发布时间】:2013-12-11 02:21:35
【问题描述】:

我还需要帮助才能让名为“guess”的变量正常工作。我也把它作为一个参数来让它工作。我必须用 GUI 界面猜测我的数字程序,到目前为止我的代码是:

from tkinter import*
import random  

class Application(Frame):

    def __init__(self, master):
        """ Initialize the frame. """
        super(Application, self).__init__(master)  
        self.grid()
        self.create_widgets()

    def create_widgets(self,guess):
        self.pw_lbl = Label(self, text = guess)
        self.pw_lbl.grid(row = 1, column = 0, sticky = W)

        self.pw_ent = Entry(self)
        self.pw_ent.grid(row = 1, column = 1, sticky = W)

        self.submit_bttn = Button(self, text = "Submit", command = self.reveal)
        self.submit_bttn.grid(row = 2, column = 0, sticky = W)

    def reveal(self):
         contents = self.pw_ent.get()
         if guess == the_number:
             message = "You got it right!"
         if guess > the_number:
             message = "lower..."
         if guess < the_number:
             message = "higher..."

print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)

root = Tk()
root.title('Guess my number')
root.geometry('350x150')

app = Application(root)

【问题讨论】:

  • 不要只是说它不起作用,而是解释它做错了什么。

标签: python python-3.x tkinter


【解决方案1】:

您的第一个问题是您向create_widgets 添加了一个guess 参数,但是当您调用 create_widgets 时,您没有为该参数传递任何值。所以,你会得到这个:

TypeError: create_widgets() missing 1 required positional argument: 'guess'

但与此同时,您想要那里的价值是什么?你想要的只是一些静态字符串,比如"Guess"。那么为什么还要添加一个作为参数呢?

您需要guess 变量的唯一地方是reveal 函数。所以让它成为一个局部变量。

reveal 中,你已经这样做了:

contents = self.pw_ent.get()

contents 将是一个字符串,例如 "25"。并且您希望guess 成为相应的数字,例如25。所以,只需在contents 上致电int

另外,您创建了一个名为message 的变量,但不要对它做任何事情。也许您想更改标签的内容?或者以打印启动横幅的方式将其打印到控制台?在不知道自己想做什么的情况下,很难知道确切的建议是什么,但您肯定想用它做点什么

最后一件事:您忘记在rootapp 上致电mainloop。否则,程序只会在屏幕外创建 GUI,然后立即退出而不显示它。

它还是有点笨拙——它是一个混合 GUI/控制台应用程序,当你可能应该有一个成员时,你有一个全局 the_number,变量都有奇怪的名称(你是从其他地方复制和粘贴它们吗? ,就像一个假的登录界面,或者pw_ent 应该对猜谜游戏有意义吗?)等等——但它会起作用:

from tkinter import*
import random

class Application(Frame):

    def __init__(self, master):
        """ Initialize the frame. """
        super(Application, self).__init__(master)  
        self.grid()
        self.create_widgets()
    def create_widgets(self):
        self.pw_lbl = Label(self, text='Guess')
        self.pw_lbl.grid(row = 1, column = 0, sticky = W)

        self.pw_ent = Entry(self)
        self.pw_ent.grid(row = 1, column = 1, sticky = W)

        self.submit_bttn = Button(self, text = "Submit", command = self.reveal)
        self.submit_bttn.grid(row = 2, column = 0, sticky = W)

    def reveal(self):
         contents = self.pw_ent.get()
         guess = int(contents)
         if guess == the_number:
             message = "You got it right!"
         if guess > the_number:
             message = "lower..."
         if guess < the_number:
             message = "higher..."
         print(message)

print("\tWelcome to 'Guess My Number'!")
print("\nI'm thinking of a number between 1 and 100.")
print("Try to guess it in as few attempts as possible.\n")
the_number = random.randint(1, 100)

root = Tk()
root.title('Guess my number')
root.geometry('350x150')

app = Application(root)
app.mainloop()

【讨论】:

    猜你喜欢
    • 2013-07-20
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 2014-09-08
    • 2021-08-21
    • 1970-01-01
    相关资源
    最近更新 更多