【问题标题】:Get value from `Tkinter.Entry` and compare its content with another value从 `Tkinter.Entry` 获取值并将其内容与另一个值进行比较
【发布时间】:2017-01-30 13:06:54
【问题描述】:

我有__init__ 函数构造一个Tkinter 窗口。窗口内有一个乘法 5 * 10 和一个 Entry 框。如果用户用正确的答案填满该框并随后按下按钮,则执行result 函数,其标签应显示“正确”消息。否则标签会显示“错误”消息。

问题是:即使答案是正确的,标签也会显示“错误”的信息。如果我在result 函数中打印self.content,它会在终端中显示正确的值。但问题出在result 函数的if 语句内部。

from Tkinter import *

class prop:

    def __init__(self):

        self.root = Tk()
        self.root.geometry("800x600")

        self.x = 5
        self.y = 10

        self.title = Label(self.root, text = "TEST")
        self.title.grid(row=0, column=0, columnspan=6)
        self.title.config(font=("Courier", 30))

        self.labelx = Label(self.root,text=self.x)
        self.labelx.grid(row=2, column=2)
        self.labelx.config(font=("Courier", 30))

        self.epi = Label(self.root,text="X")
        self.epi.grid(row=2, column=3)
        self.epi.config(font=("Courier", 30))

        self.labely = Label(self.root,text=self.y)
        self.labely.grid(row=2, column=4)
        self.labely.config(font=("Courier", 30))

        self.total = Entry(self.root, font = "Courier 25 bold",justify="center",width=3)
        self.total.grid(row=2, column=5, padx=20)

        button = Button(self.root, text="OK", command = self.result)
        button.grid(row=3, column=2)

        self.content = Entry.get(self.total)

        self.root.mainloop()

    def result(self):
        if self.content == (self.x * self.y):
            self.labres = Label(self.root, text="Right")
            self.labres.grid(row=2, column=6)
            self.labres.config(font=("Courier", 30))
        else:
            self.labres = Label(self.root, text="Wrong")
            self.labres.grid(row=2, column=6)
            self.labres.config(font=("Courier", 30))


start = prop()

【问题讨论】:

    标签: python tkinter tkinter-entry


    【解决方案1】:

    在输入值之前,您正在读取 Entry 的内容。您应该在单击按钮后阅读内容。

    此外,您正在将self.content == (self.x * self.y) 中的字符串与 int 进行比较。你应该使用int(self.content) == (self.x * self.y)

    更新后的结果函数为:

    def result(self):
            self.content = Entry.get(self.total)
            if int(self.content) == (self.x * self.y):
                self.labres = Label(self.root, text="Right")
                self.labres.grid(row=2, column=6)
                self.labres.config(font=("Courier", 30))
            else:
                self.labres = Label(self.root, text="Wrong")
                self.labres.grid(row=2, column=6)
                self.labres.config(font=("Courier", 30))
    

    【讨论】:

    • 如果我这样做:如果 int(self.content) 我得到:ValueError: int() 以 10 为底的无效文字:
    • @Athon 请确保self.content 不为空或不包含任何字母或符号。在int(self.content)中使用之前需要验证self.content
    • 你能解释一下你之前要验证的意思吗?
    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多