以下代码是我引用的内容 来自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()
当我运行程序,键入值,然后选择回车按钮时会发生这种情况。
答案 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。