根据条件更改Tkinter标签小部件中的显示文本

时间:2015-06-22 16:40:33

标签: python-3.x tkinter

以下代码是我引用的内容     来自tkinter import *

SELECT P.id,P.name,P.description,P.publish_date,C.name 
FROM Post P
LEFT JOIN Category C
ON P.type = C.id
WHERE FIND_IN_SET(P.id,
    (
        SELECT GROUP_CONCAT(ids) FROM
            (SELECT SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY publish_date DESC),',',3) as ids
                FROM Post
                GROUP BY type      
            ) AS foo
        GROUP BY ''
    )
)

我似乎无法更新标签小部件(名称'检查')。 我希望能够根据检查条件更新它,但我无法让它工作。 我放了'打印(回答)'检查变量的行,但是我收到错误:

root = Tk()

#Variables
answer = "Enter Answer"

data = ""

#Functions
def function():
    data = e.get()
    while data == "":
        if data == 5:
            answer = "Correct"
        if data != 5:
            answer = "Incorrect"
    print(answer)


top = Label(root, text = "Test")
top.pack()

e = Entry(root)
e.pack()
e.focus_set()

b = Button(root, text = "Enter", command = function)
b.pack()

check = Label(root, text = answer)
check.pack()

mainloop()

当我运行程序,键入值,然后选择回车按钮时会发生这种情况。

1 个答案:

答案 0 :(得分:1)

您的answer变量未在函数范围内定义。为了以最简单的方式实现这一点,我建议您使用一个类来保存UI中的所有小部件。

from tkinter import *

class Window():

    def __init__(self, root):

        self.top = Label(root, text = "Test")
        self.top.pack()

        self.e = Entry(root)
        self.e.pack()
        self.e.focus_set()

        self.b = Button(root, text = "Enter", command = self.function)
        self.b.pack()

        self.answer = StringVar()
        self.answer.set("Enter answer")

        self.check = Label(root, text = self.answer.get(), textvariable = self.answer)
        self.check.pack()

    #Functions
    def function(self):

        data = self.e.get()

        if data == "5":
            self.answer.set("Correct")
        else:
            self.answer.set("Incorrect")

root = Tk()
w = Window(root)
root.mainloop()

此外,由于widget command用作回调,因此您不需要使用while循环来完成您想要的操作。只需按照我的方式进行if / else检查,每次点击按钮都会再次检查。

我还将您的answer变量更改为StringVar()的实例。这是一种Tkinter变量,专门用于完成您要做的事情。然后,我可以使用配置选项textvariable = self.answer,以便在StringVar更改时允许标签更新。要访问StringVar的文本,您必须调用self.answer.get();像我在self.answer.set("text")内所做的那样更改您调用function的数据。

最后,由于您的Entry self.e也是StringVar的实例,因此我必须将您的if条件更改为if data == "5":,因为数据将是一个字符串而不是一个int。

相关问题